目录
(1)slow一次走1步,fast一次走2步,一定能追上吗?
(2)slow一次走1步,fast一次走3步,能追上吗?fast一次走4步呢?n步呢?
1、例题引入
- 链接直达:
- 题目:
2、何为带环链表
正常的单链表每个节点顺次链接,最后一个节点指向NULL,如下:
而带环链表的最后一个节点不再指向NULL了,指向的是前面任意一个节点,以此形成带环链表,并一直循环下去。如下:
3、题解思路
我们可以将上述图画的抽象一点,在没有进入环之前我们用直线表示,进入环之后用圈来表示,以此示意循环。此题需要用到我们之前讲解的求中间节点和求倒数第k个节点的快慢指针的思想。定义两个指针slow和fast均指向一开始的位置。 让slow一次走一步,fast一次走两步。
当slow走到直线一半的位置时,此时的fast刚好就在环的入口点。
假设slow刚好走到环的入口点时,fast走到如下位置,此时fast开始追赶模式
fast开始追赶slow,假设fast在如下的位置开始追上slow
- 代码如下:
bool hasCycle(struct ListNode *head) { struct ListNode*slow=head; struct ListNode*fast=head; while(fast&&

本文深入探讨了环形链表的特性及应用,利用快慢指针原理解决了环形链表的检测问题,并进一步分析了如何定位环的入口点。




假设slow刚好走到环的入口点时,fast走到如下位置,此时fast开始追赶模式

最低0.47元/天 解锁文章
349





