实现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),因为我们只使用了两个额外的指针来追踪链表的节点。
通过使用快慢指针算法,我们可以有效地检查链表中是否存在环。
