力扣笔记——环形链表II

       在做力扣环形链表找入环的第一个节点时,没有什么太好的思路,原题题号为142。看了解答之后,对于解答所提及的补充:为什么fast与slow第一次环中相遇一定是在slow的第一圈的时候?解答的图解不是很清晰,没看懂,自己琢磨了下,此处记录一下防止遗忘。

        当slow指针第一次到达环形入口时,fast指针位于环形中任意位置,此时先假设fast在大于n/2处。此时fast要走完当前这圈的话,距离环形入口的距离为k,所以当slow走k/2距离时,fast会位于环形入口(因为fast指针速度是slow指针的两倍),即下图。

        此时,slow还有n-k/2(分子只有k)的距离要走,即(2n-k)/2,即n/2+(n-k)/2,这个值会大于n/2因为k绝对是小于n的意味着slow还有半圈以上的距离要走才能走完它的第一圈,但是当slow再走n/2的距离时,fast也会走n的距离,即fast从环形入口走完一圈又到了环形入口。这意味着slow还没走完它的第一圈的时候,fast已经追上了slow并且相遇了,所以第一次环中相遇一定是在slow的第一圈的时候。

        这个时候假设的是当slow指针第一次到达环形入口时,fast在大于n/2处。如果在小于n/2处呢,其实也是一样的,同样意味着slow要走k/2距离时,fast会到达环形入口。此时,slow也即还有n-k/2(分子只有k)的距离要走,即(2n-k)/2,即n/2+(n-k)/2,即即使k无限逼近于n,slow要走的距离还是n/2+一个正数,大于n/2的也就和上面描述的k在n/2右边是一样的结果和结论。

        当k=n时,即slow第一次到达环形入口时,fast也处在环形入口,slow移动n/2的距离后到达环的一半,fast从环形入口经过一圈又回到环形入口。

        写的有点多,因为怕回过头来再看的时候再花时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值