链表带环
有的链表很特殊,内部有环,这种链表称为带环链表
判断一个链表是否带环
-
为什么
slow
走一步,fast
走两步一定会在交点处相遇?会不会出现二者错过的情况?当
fast
入环之后,slow
可能还没有入环,等到slow
入环以后,两个指针之间就会产生一个距离这时可以理解为是fast
指针去追slow
,这样二者的距离在一点点减小,而且每次循环都是以大小为一个单位缩小,所以,二者距离总会到为0
的时候,这时二者在meetNode
处相遇,而且是肯定相遇 -
fast
走三步,四步…n
步,可以相遇吗?如果
fast
与slow
之间的距离是n - 1
的倍数,那这种情况下,一定可以相遇如果不是,则看二者错过后,二者之间的新距离,如果这个新距离仍然不是
n - 1
的倍数,则一定不可能相遇
求一个带环链表的环的起点
有这样一个公式,不做证明了 L = (n-1) * c + (c - x)
这里用到了上面判定链表是否带环时得到的相遇节点,一个指针从表头出发,一个指针从相遇节点处出发,使二者都以每次循环走一个节点的速度遍历链表,二者最终一定会在环的起点相遇,这样就求出了环的起点