1. 题目来源
链接:141. 环形链表
题单:
-
- 链表、二叉树与一般树(前后指针/快慢指针/DFS/BFS/直径/LCA)
- §1.6 快慢指针
2. 题目解析
思路:
- 用相对速度思考快慢指针的问题会简化很多思维工作量。
- 快指针于慢指针的相对速度是 1,那么追赶的话最终肯定是能追上慢指针并相遇的。
- 所以,终究还是一个快慢指针问题。
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( 1 ) O(1) O(1)
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
bool hasCycle(ListNode *head) {
auto a = head, b = head;
while (b && b->next) {
a = a->next;
b = b->next->next;
if (a == b) return true;
}
return false;
}
};