之前遇到过这个问题,记得方法是先分别用两个快、慢指针,让他们在环中相遇,然后一个从头结点,一个从相遇点,都一次走一步,相遇点即为入口点。
但是关于这个结论的证明,看了网上好几个博客,感觉都说的不够清晰,印象中有一篇讲得还不错,还算理解了它的思想,今天做题时想要去搜结果搜不到了。
这里写下我自己的一点理解:
其中p点为快慢指针的相遇点。
下面要证明的问题是,一个指针从p点开始,另一个指针从head开始,一定会在q点(入口点相遇)。
首先根据p是快慢指针的相遇点:
2(l1+s)=l1+s+kl2
,其中
k=1,2,3,...
移项得:
l1=(k−1)l2+l2−s
其物理含义就是说从head开始到入口点的距离,和从
p
点开始在环上走
其证明就是这么简洁,其实就是数学等式的一个简单变形,然后用物理解释其含义。