环形链表题目分析

题目大概意思就是让我们判断是不是环形链表。

解题思路:

这一题我们只能用快慢指针来判断了,让慢指针走一步,快指针走两步,原理我们后面再说。思路出来了,代码就很简单了,你自己动手试试吧。

代码展示:

这个题目其实并不是我要说的重点,这篇文章的重点是下面的两个问题

1.为什么快慢指针能够相遇?

2.如果我让slow走一步,fast走3步,4步,5步还能追上吗?

问题解析:

问题一:

在这个是环形链表的前提下,这里是slow走一步,fast走两步,fast先进环,总有一天,slow也会进环,所以我们就设fast和slow相差N,如下:

下一步slow走一步,fast走两步,那么他们就相差N-1步,继续走下去以此类推,fast和slow相差的距离就是0,就是追上了;

问题二:

我们设fast走三步,那么,N就得分两种情况,是奇数,还是偶数?设环的长度为c

是奇数就会进入新一轮的追击,距离就变成了c-1,偶数就追上了。到这里又分为两种情况,c-1为奇数和c-1为偶数,又进入刚刚分析的那两种情况,当c-1为偶数就追上了,c-1为奇数就又要错过进入下一轮。

总结:1.N是偶数,第一轮就追上了

           2.N是奇数,第一轮会错过,进入下一轮追击,距离会变成c-1

                   b.如果c-1是偶数,那么下一轮就追上了。

                   a.如果c-1是奇数,那么永远追不上。

那么真的会存在永远追不上的场景吗?

永远追不上的条件有两个,N是奇数,C-1是奇数,c是偶数,只有这样才会永远追不上。那么有没有N是奇数时,C是偶数的情况呢?

想要知道有没有这样的情况,我们需要等式来解决这个问题,通过fast和slow走过的距离来列出等式。

    所以最终的结论是一定可以追上。

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值