以下是一个示例 Java 代码:
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
public boolean hasCycle(ListNode head) {
if (head == null || head.next == null) {
return false;
}
ListNode slow = head;
ListNode fast = head.next;
while (slow != fast) {
if (fast == null || fast.next == null) {
return false;
}
slow = slow.next;
fast = fast.next.next;
}
return true;
}
这段代码中,我们首先检查链表是否为空或只有一个节点,如果是,则一定没有环。然后,我们初始化慢指针(slow)和快指针(fast),开始迭代。快指针每次移动两步,慢指针每次移动一步,直到它们相遇(或快指针到达链表末尾)。如果它们相遇,说明链表中存在环,返回 true;如果快指针到达末尾而没有相遇,说明没有环,返回 false。
这种方法的时间复杂度是 O(n),其中 n 是链表的长度。它是一种有效的方法来检测链表中是否存在环。