题目考查的知识点
- 本题抽象为链表是否存在环的问题。
- 同时考察快慢指针。
题目解答方法的文字解析
- 当一个链表有环时,快慢指针都会陷入环中进行无限次移动,然后变成了追及问题。
- 想象一下在操场跑步的场景(有环),只要一直跑下去,快的总会追上慢的。
- 当两个指针都进入环后,每轮移动使得慢指针到快指针的距离增加一,同时快指针到慢指针的距离也减少一,只要一直移动下去,快指针总会追上慢指针。
如果将尾结点的 next 指针指向其他任意一个结点,那么链表就存在了一个环。
本题解析所用的编程语言
- c++
完整且正确的编程代码
class Solution {
public:
bool hasCycle(ListNode* head) {
// 初始化快慢指针都为头节点
ListNode* slow = head, * fast = head;
// 只要快慢指针还可以继续前进
while (fast != nullptr && fast->next != nullptr) {
slow = slow->next;// 慢指针每次前进一个节点
fast = fast->next->next;// 快指针每次前进两个节点
//(while里面的条件保证了不会有空指针的访问)
if (fast && slow->val == fast->val)//快慢指针相遇
return true;
}
return false;
}
};
/*
2023.08.03
*/



京公网安备 11010502036488号