/**
* 判断链表是否有环
* 在Java中,判断一个链表是否有环可以通过使用快慢指针的方法来实现。
* 快指针每次走两步,慢指针每次走一步,如果链表有环,那么快慢指针最终会在环中相遇。
* 如果链表不存在环,那么快指针最终会走到链表末尾。
*/
public class LinkedListCycle {
static class ListNode {
int data
ListNode next
ListNode(int x) {
data = x
next = null
}
}
// 判断链表是否有环
public static 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
}
public static void main(String[] args) {
ListNode node1 = new ListNode(5)
ListNode node2 = new ListNode(3)
ListNode node3 = new ListNode(7)
ListNode node4 = new ListNode(2)
ListNode node5 = new ListNode(6)
node1.next = node2
node2.next = node3
node3.next = node4
node4.next = node5
node5.next = node2
boolean hasCycle = hasCycle(node1)
System.out.println("该链表是否有环hasCycle:" + hasCycle)
}
}