当前位置:   article > 正文

[单链表] 寻找环形链表的入口

环形链表的入口

1、在寻找环形链表的入口之前,如何判断链表是环形的?

定义两个指针fast和slow,fast每次走两步,slow每次走一步,如果fast和slow可以相遇,说明链表带环。

2、如何找到环形链表的入口?

 

如图是一个环形链表。

设a点为链表头结点,b点为环的入口点,c点为fast和slow的第一次相遇点。

设ab长度为x,bc长度为y,z为环的长度。

则fast在相遇前走的距离应该是:x+nz+y(n为fast运动的圈数)。

slow的距离:x+y。

因为fast的速度是slow的二倍;

则有:2(x+y)= x+nz+y

                   x+y = nz

                       x = nz - y

可以得出,x=(n-1)z+m,也就是说,如果一个指针1从c点出发,另一个指针2从a点出发,指针1走了n-1圈后再走动m,就可以到达b点,而此时指针1走动的距离刚好为x,即指针2从a走到b的距离。

简而言之,此时让一个引用slow或者fast从头结点开始走,另一个引用在第一次相遇点,两个引用同时走,每次走一步,,下次相遇点就是环的入口点。
原文链接:https://blog.csdn.net/yufy0528/article/details/105255450

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/604747
推荐阅读
相关标签
  

闽ICP备14008679号