怎样验证一个链表是否有环,请用java代码实现
时间: 2024-09-09 09:04:44 浏览: 38
java代码-寻找链表的头节点,每个节点,有 id 和 nextId 两个属性,nextId 表示指向节点 Id。现在请实现一个办法寻找该链表的头节点。
验证链表是否存在环,可以使用“快慢指针”或“双指针”法。这种方法的基本思想是让两个指针分别以不同的速度遍历链表。如果链表有环,那么快指针最终会追上慢指针;如果没有环,快指针将先到达链表的末尾。
以下是Java代码实现:
```java
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
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;
// 如果快指针已经超过了慢指针的位置,则链表存在环
if (fast == slow) {
return true;
}
}
return false;
}
```
在这个代码中,我们首先检查头节点和下一个节点是否为空,如果为空则直接返回false。然后创建两个指针slow和fast,初始时fast向前两步,每次循环都让slow移动一步,fast移动两步。如果fast或fast的next为null,说明链表已到结尾,不存在环。当它们相遇时(即fast等于slow),链表存在环。
阅读全文