欢迎访问宙启技术站
智能推送

实现Java函数,检查链表中是否存在环?

发布时间:2023-06-30 03:44:15

在Java中,我们可以使用快慢指针的方法来检查链表中是否存在环。

快慢指针算法是一种通过使用两个指针,一个快指针和一个慢指针,在一个链表中遍历来确定是否存在环的算法。这种算法的运行时间是线性的,因为快指针每次移动两个节点,慢指针每次移动一个节点。如果链表中存在环,则快指针最终会追上慢指针,如果没有环,则快指针将会到达链表的末尾。

下面是一个使用快慢指针算法检查链表中是否存在环的示例代码:

class ListNode {
    int val;
    ListNode next;
    
    ListNode(int val) {
        this.val = val;
        this.next = null;
    }
}

public class LinkedList {
    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; // 链表有环
    }
}

在这个代码中,我们首先检查链表是否为空或只有一个节点,这些情况肯定不会有环。然后我们初始化两个指针,慢指针和快指针,慢指针每次移动一个节点,快指针每次移动两个节点。我们使用一个循环来比较慢指针和快指针是否相等,如果相等则说明链表有环,如果快指针到达链表的末尾则说明链表没有环。

这个代码的时间复杂度是O(n),其中n是链表的长度。空间复杂度是O(1),因为我们只使用了两个额外的指针来追踪链表的节点。

通过使用快慢指针算法,我们可以有效地检查链表中是否存在环。