【887、判断链表有环】

59 阅读1分钟

以下是一个示例 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 是链表的长度。它是一种有效的方法来检测链表中是否存在环。