🧩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 · 链表