要判断链表中是否有环,可以使用快慢指针的方法。
首先,我们定义两个指针,一个快指针(每次移动两步)和一个慢指针(每次移动一步)。
从链表的头节点开始,快指针每次移动两步,慢指针每次移动一步,如果链表中存在环,则
快指针最终会追上慢指针。
具体的算法步骤如下:
1. 定义快指针 fast 和慢指针 slow,初始都指向链表的头节点。
2. 使用 while 循环,当快指针和快指针的 next 节点都不为 null 时,执行循环体。
3. 在循环体中,快指针每次移动两步,慢指针每次移动一步。
4. 当快指针等于慢指针时,说明链表中存在环,返回 true。
5. 当循环结束后,说明链表中不存在环,返回 false。
根据要求,如果 pos 为-1,则链表中没有环,返回 false。否则,返回 true。
下面是使用 Java 实现的示例代码:
```java
class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
public class LinkedListCycle {
public static boolean hasCycle(ListNode head) {
if (head == null || head.next == null) {
return false;
}
ListNode fast = head;
ListNode slow = head;
while (fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
if (fast == slow) {
return true; // 链表中存在环
}