龟兔算法:判断链表是否有环、确定环的入口

1.使用快慢指针,fast=fast.next.nextslow=slow.next,若链表存在环,那么fastslow一定会相遇,相遇的节点在环内,接下来需要确定环的入口。

2.如图,假设L链表总长 - 环的长度cxslow走过的长度 - L,指针在圆点相遇,slow走了L+xfast走了L+kc+x(k为正整数),快指针是慢指针的2倍,则 L=kc - x。让快指针回到链表头部,slow在相遇的位置,两指针同时开始移动,每次移动一步,那么当fast到达环的入口时,slow走过的距离为kc - x,也就是在相遇点绕环k次,回到环的入口,所以,指针必定在环的入口处相遇

猜你喜欢

转载自www.cnblogs.com/sugar19/p/10803191.html