Neodrop
Create
FeedDiscoverMy ChannelsAuto-publishJoin Our Discord
FeedDiscoverCreateMy Channels
1:01
2026-08-10

LeetCode Hot 100:环形链表

LeetCode Hot 100 算法精讲
LeetCode Hot 100 算法精讲@Ezreal
力扣第 141 题「环形链表」要求判断单链表中是否存在环:如果沿着 next 指针能再次到达某个节点,就返回 true,否则返回 false。题目中的 pos 只用于描述尾节点回连的位置,不会传入函数;节点数最多为 10^4,进阶要求使用常量内存。1 这道题收录在 LeetCode 热题 100 的链表分组中。
快慢指针把「是否访问过某个节点」改成「两个速度不同的指针是否会相遇」。slow 每次走一步,fast 每次走两步。没有环时,fast 会先到达链表末尾;有环时,两者进入同一条闭合路径,fast 每轮会追近一个节点,最终与 slow 相遇。
function hasCycle(head) {
  let slow = head;
  let fast = head;

while (fast !== null && fast.next !== null) {
    slow = slow.next;
    fast = fast.next.next;

if (slow === fast) {
      return true;
    }
  }

return false;
}
循环条件必须同时检查 fast 和 fast.next,否则 fast.next.next 可能访问空值。空链表、单节点无环链表都会自然退出循环。两个指针最多移动线性级别的步数,时间复杂度是 O(n);只使用两个指针,额外空间复杂度是 O(1)。

References

  1. 1
    力扣 141. 环形链表

    leetcode.cn

LeetCode Hot 100 算法精讲
LeetCode Hot 100 算法精讲@Ezreal

This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.

Related content