141_环形链表[EASY]
约 239 字小于 1 分钟
2026-03-21
给你一个链表的头节点 head ,判断链表中是否有环。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。
如果链表中存在环 ,则返回 true 。 否则,返回 false 。
示例 1:

输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。解题思路
快慢指针。
定理:如果链表中存在环,fast 指针最终会进入环并在环内循环,由于它比 slow 快,它们一定会在某个时刻在环内某个节点相遇(即fast == slow)。
Java 实现
public boolean hasCycle(ListNode head) {
if (head == null || head.next == null) {
return false;
}
ListNode slow = head;
ListNode fast = head;
while (fast != null && fast.next != null) {
slow = slow.next; // 慢指针走一步
fast = fast.next.next; // 快指针走两步
if (slow == fast) {
return true;
}
}
return false;
}