🧩Algo 链表
141. 环形链表
难度:🟢 Easy | 标签:链表、快慢指针 | 状态:⬜ LeetCode 链接
思路
Floyd 快慢指针:slow 每步 1 格,fast 每步 2 格。 有环必在环内相遇;无环 fast 会先撞 nullptr。
代码
class Solution {
public:
bool hasCycle(ListNode* head) {
ListNode *slow = head, *fast = head;
while (fast && fast->next) {
slow = slow->next;
fast = fast->next->next;
if (slow == fast) return true;
}
return false;
}
};
复杂度
- 时间 O(n),空间 O(1)
易错 / 回顾
- 循环条件
fast && fast->next(两步要保证) - 不要写
slow == fast在循环开头——初始就相等,会误判 - 哈希做法 O(n) 空间,不优雅
Related · 链表