题目大概意思就是让我们判断是不是环形链表。
解题思路:
这一题我们只能用快慢指针来判断了,让慢指针走一步,快指针走两步,原理我们后面再说。思路出来了,代码就很简单了,你自己动手试试吧。
代码展示:
这个题目其实并不是我要说的重点,这篇文章的重点是下面的两个问题
1.为什么快慢指针能够相遇?
2.如果我让slow走一步,fast走3步,4步,5步还能追上吗?
问题解析:
问题一:![](https://img-blog.csdnimg.cn/direct/7fdf755b6fb3446b991f30b513a318c1.png)
在这个是环形链表的前提下,这里是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走过的距离来列出等式。