快慢指针方法判断链表是否存在环为什么是选择2作为快指针的步长

假设慢指针为walker快指针为runner,那么当慢指针到达环入口的时候设两个指针之间的距离为S,环的长度设为R,

那么相对于入口,runner的距离为s,worker的距离为0
下图中指针逆时针移动
经过时间t,runner相对于入口点走了s+kt
worker相对于入口点走了t
两个节点一定会相遇,相遇的时候满足的条件是s+kt-t=nR,两个指针相遇的时候距离之差为环的长度的整数倍

那么当两者相遇的时候就要满足S+(k-1)t=nR(其中kt表示快指针的速度,t表示慢指针的速度,n表示圈数,R表示环中的节点数,两者走的距离的差值为(k-1)t)
在这里插入图片描述

  • 通过上式可以看到当k,R 取不同的的值的时候上式的 t , n 的取值可能会变化
  • 当时当我们取2的时候由于s<R则一定会在慢的指针走一圈之内两者相遇,每走一步,快指针和慢指针之间的距离就会减1
  • k同时也可以取其它不同的值,只要条件满足上个等式,就会相遇。

参考链接:https://blog.csdn.net/sinat_35261315/article/details/79205157

寻找环的入口点的方法:https://blog.csdn.net/liushall/article/details/80444753

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值