怎么找到链表环的入口

 

 

https://leetcode-cn.com/problems/find-the-duplicate-number/solution/kuai-man-zhi-zhen-de-jie-shi-cong-damien_undoxie-d/

 

看了半天 记录一下

 

首先   设置一个快慢指针  快指针  fast  一次走两步   慢指针  slow  一次走一步

 

如果链表有环   那么快慢指针一定会在链表中相遇

相遇时   fast指针 走了 2n 步  , slow 指针走了 n步

设 环的 长度为 c  那么  n%c  == 0

 

再设  起点  到 环的距离 为 m  这里最巧妙

 

slow指针在环中走过的距离是 n-m

 

因为 n%c == 0

所以slow指针再前进 m 步 刚好到环的入口

 

再指针上体现为   快慢指针前进    快慢指针相遇   指针起点为新指针 finder

 

finder指针 和slow指针 同时前进  知道两者相遇   这个点就是 环的入口

 

posted @ 2022-01-07 20:56  霸王龙168  阅读(130)  评论(0)    收藏  举报