Lazy loaded image
test
00 min
2025-1-22
Completed
标签
相关企业
难度

LeetCode 第 142 题:环形链表 II(Linked List Cycle II)

题目描述

给定一个链表的头节点 head,返回链表开始入环的第一个节点。如果链表无环,则返回 null
示例:
图示:

解题思路

1. 快慢指针法(Floyd 判圈算法)

核心思想:
  • 使用两个指针,slowfastslow 每次走一步,fast 每次走两步。
  • 如果链表有环,slowfast 一定会相遇。
  • 相遇后,将 slow 重新指向头节点,然后 slowfast 同时每次走一步,再次相遇的节点就是环的入口。
步骤:
  1. 初始化 slowfast 都指向头节点 head
  1. 移动 slowfast,直到它们相遇或 fast 到达链表末尾。
  1. 如果相遇,将 slow 重新指向 head,然后 slowfast 同时每次走一步,直到再次相遇。
  1. 返回相遇的节点(环的入口)。
时间复杂度: O(n)
空间复杂度: O(1)

2. 哈希表法

核心思想:
  • 遍历链表,将每个节点存入哈希表。
  • 如果当前节点已经存在于哈希表中,说明链表有环,且当前节点就是环的入口。
步骤:
  1. 初始化一个哈希表 visited
  1. 遍历链表,将每个节点存入 visited
  1. 如果当前节点已经存在于 visited 中,返回该节点。
  1. 如果遍历结束仍未找到环,返回 null
时间复杂度: O(n)
空间复杂度: O(n)

详细解答

方法 1:快慢指针法

代码实现:
过程图解:
  1. 初始化:
    1. 第一次遍历:
        • slow 每次走一步,fast 每次走两步。
        • 如果 slowfast 相遇,说明链表有环。
    1. 第二次遍历:
        • slow 重新指向 head,然后 slowfast 同时每次走一步。
        • 再次相遇的节点就是环的入口。

    方法 2:哈希表法

    代码实现:
    过程图解:
    1. 初始化:
      1. 遍历链表:
          • 将每个节点存入 visited
          • 如果当前节点已经存在于 visited 中,说明链表有环,且当前节点就是环的入口。

      总结

      • 快慢指针法:时间复杂度 O(n),空间复杂度 O(1),适合空间要求严格的场景。
      • 哈希表法:时间复杂度 O(n),空间复杂度 O(n),适合理解简单的场景。
      根据题目要求选择合适的解法即可!如果还有疑问,欢迎随时提问! 😊
      上一篇
      空白文章
      下一篇
      示例文章