链表有环找入口的问题

之前遇到过这个问题,记得方法是先分别用两个快、慢指针,让他们在环中相遇,然后一个从头结点,一个从相遇点,都一次走一步,相遇点即为入口点。
但是关于这个结论的证明,看了网上好几个博客,感觉都说的不够清晰,印象中有一篇讲得还不错,还算理解了它的思想,今天做题时想要去搜结果搜不到了。
这里写下我自己的一点理解:
这里写图片描述
其中p点为快慢指针的相遇点。
下面要证明的问题是,一个指针从p点开始,另一个指针从head开始,一定会在q点(入口点相遇)。

首先根据p是快慢指针的相遇点:
2(l1+s)=l1+s+kl2 ,其中k=1,2,3,...
移项得:l1=(k1)l2+l2s
其物理含义就是说从head开始到入口点的距离,和从p 点开始在环上走n(n=0,1,2,...) 圈再加上p到入口点的距离相等。
其证明就是这么简洁,其实就是数学等式的一个简单变形,然后用物理解释其含义。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章