您的位置:首页 > 其它

链表有环找入口的问题

2016-05-17 15:35 288 查看
之前遇到过这个问题,记得方法是先分别用两个快、慢指针,让他们在环中相遇,然后一个从头结点,一个从相遇点,都一次走一步,相遇点即为入口点。

但是关于这个结论的证明,看了网上好几个博客,感觉都说的不够清晰,印象中有一篇讲得还不错,还算理解了它的思想,今天做题时想要去搜结果搜不到了。

这里写下我自己的一点理解:



其中p点为快慢指针的相遇点。

下面要证明的问题是,一个指针从p点开始,另一个指针从head开始,一定会在q点(入口点相遇)。

首先根据p是快慢指针的相遇点:

2(l1+s)=l1+s+kl2,其中k=1,2,3,...

移项得:l1=(k−1)l2+l2−s

其物理含义就是说从head开始到入口点的距离,和从p点开始在环上走n(n=0,1,2,...)圈再加上p到入口点的距离相等。

其证明就是这么简洁,其实就是数学等式的一个简单变形,然后用物理解释其含义。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  链表 指针