1.使用快慢指针,fast=fast.next.next,slow=slow.next,若链表存在环,那么fast和slow一定会相遇,相遇的节点在环内,接下来需要确定环的入口。
2.如图,假设L= 链表总长 - 环的长度c,x为slow走过的长度 - L,指针在圆点相遇,slow走了L+x,fast走了L+kc+x(k为正整数),快指针是慢指针的2倍,则 L=kc - x。让快指针回到链表头部,slow在相遇的位置,两指针同时开始移动,每次移动一步,那么当fast到达环的入口时,slow走过的距离为kc - x,也就是在相遇点绕环k次,回到环的入口,所以,指针必定在环的入口处相遇
原文:https://www.cnblogs.com/sugar19/p/10803191.html