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次,回到环的入口,所以,指针必定在环的入口处相遇

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

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

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄