015 · Linked List Cycle

algorithm
Published

May 8, 2026

Problem

给定一个单链表的头节点 head

请判断这个链表中是否存在环。

链表中每个节点包含两个部分:

  • val:当前节点的值
  • next:指向下一个节点的指针

如果某个节点的 next 指针指向了链表中之前出现过的某个节点,那么这个链表就有环。

例如:

3 -> 2 -> 0 -> -4
     ^         |
     |_________|

在这个链表中,-4next 又指回了节点 2,所以链表中存在环。

需要返回:

  • 如果链表中有环,返回 true
  • 如果链表中没有环,返回 false

题目中的 pos 只用来表示尾节点连接到链表中的哪个位置。你不需要在代码中使用 pos,它也不会作为参数传入。

Examples

示例 1

Input:  head = [3,2,0,-4], pos = 1
Output: true

解释:尾节点 -4 指向下标为 1 的节点,也就是节点 2,所以链表中有环。

示例 2

Input:  head = [1,2], pos = 0
Output: true

解释:尾节点 2 指向下标为 0 的节点,也就是节点 1,所以链表中有环。

示例 3

Input:  head = [1], pos = -1
Output: false

解释:pos = -1 表示尾节点没有连接到链表中的任何节点,所以没有环。

Constraints

  • 链表中节点的数量范围是 \([0, 10^4]\)
  • \(-10^5 \leq\) Node.val \(\leq 10^5\)
  • pos-1,或者是链表中的一个有效下标