初始状态
经过多次”移动“后的状态
如果能相遇,那么 car == bike, 也就是它们在环形链表上, car 和 bike 的地址相等。
/**
* @Description
* 给定一个链表,判断链表中是否有环。
*
* 如果链表中存在环,则返回 true 。 否则,返回 false 。
*
* 解决方法:快慢指针,慢的走一下 快的走两下,如果有环形链表那么他么肯定会在某一点相遇
* @Author Meng
* @Versions
* @Date 2021-08-24-18:37
*/
public class Solution141 {
public static void main(String[] args) {
ListNode l1 = new ListNode(3);
ListNode l2 = new ListNode(2);
ListNode l3 = new ListNode(0);
ListNode l4 = new ListNode(4);
l1.next = l2;
l2.next = l3;
// l3.next = l4;
// l4.next = l2;
System.out.println(hasCycle(l1));
}
public static boolean hasCycle(ListNode head) {
if (head == null || head.next == null){
return false;
}
ListNode quick = head;
ListNode slow = head;
do {
quick = quick.next.next;
slow = slow.next;
if (quick == null || slow == null || quick.next == null){
return false;
}
}while ((quick.next != slow.next));
return true;
}
}

京公网安备 11010502036488号