链表中环的入口节点题目的双指针解法证明

本文解析了通过快慢指针技术寻找链表中环的入口节点的算法原理。利用头节点、快指针和慢指针,通过特定的移动策略,证明了从头节点和首次相遇点同时移动,二次相遇点即为环的入口。适用于链表数据结构的深入理解和算法设计。
摘要由CSDN通过智能技术生成

头节点Head,快指针fast,慢指针slow。

初始快慢指针都等于Head,slow一次走一格,fast一次走两格。

另外我们现在要达成共识,first_meet节点一定在环内部,即相遇的地方一定是在环里面的某处。能理解再往下看。

快慢指针第一次相遇时,假设都等于first_meet,即二者在first_meet节点相遇。那么二者第一次相遇一定是因为快指针把慢指针套圈了,即fast比slow多走了一个环的周长。我们假设这个周长为circle(比如节点3->节点4->节点5->节点3,这个环的周长是3),则slow指针共走了circle长度,fast共走了两个circle长度,一减等于circle,正好,没毛病。

我们想求的是环的入口位置,即环的入口离Head头节点的距离。那么设这个未知量为x,我们现在要求解x的值。

头节点到入口距离为x,头节点到相遇位置距离为circle(忘了怎么来的回去看第三段),则入口离相遇位置距离为circle-x。从相遇处往后走到环的入口处,走的距离也是circle-x。原因:入口到相遇处距离为circle-x,那么环的长度减这一段,就等于环上剩下的长度。到这里我们得到了从头节点走到环入口的距离等于从相遇处走到环入口的距离的结论,那么显然我们就分别从headfirst_meet分别往后移动,第二次相遇时的位置就一定是环的入口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值