循环链表相交-快慢指针找相交点证明

循环链表相交-快慢指针找相交点证明

 

我们要证明的不是  b = c, 而是两个速度相同的指针分别从O点和P点顺时针出发,它们会在Q点相遇。

 

1、 先行条件是快慢指针在P点相遇,且快指针速度是慢指针的2倍,则相遇时,快指针走过的路径长度是慢指针的2倍

       解:  设快慢指针在P点相遇时,慢指针在圆圈中走了m圈, 快指针走了n圈。

                则有:   2[c + m(a + b) + a] = c + n(a + b) + a            (1)

                 <=>     c = (n - 2m - 1) (a+b) + b              (2)

           由公式(2)我们可以知道,c刚好等于整数倍周长 + b ,如果一个指针在P点出发,一个在O点出发,当从O出发的指针到达Q点时,从P出发的指针刚好走了一个b + 整数倍的周长,然后出现在Q点,从而可知两个指针在Q点相遇。