linked-list-cycle
/**
*
* @author gentleKay
* Given a linked list, determine if it has a cycle in it.
* Follow up:
* Can you solve it without using extra space?
*
* 给定一个链表,确定它是否有一个循环。
* 跟进:
* 你能在不使用额外空间的情况下解决它吗?
*/
/**
*
* @author gentleKay
* Given a linked list, determine if it has a cycle in it.
* Follow up:
* Can you solve it without using extra space?
*
* 给定一个链表,确定它是否有一个循环。
* 跟进:
* 你能在不使用额外空间的情况下解决它吗?
*/
public class Main10 {
public static void main(String[] args) {
ListNode head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(4);
head.next.next.next = new ListNode(6);
head.next.next.next.next = head;
System.out.println(Main10.hasCycle(head));
}
static class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
public static boolean hasCycle(ListNode head) {
if (head == null) {
return false;
}
ListNode fast = head; // 两倍速度走
ListNode slow = head; // 一倍速度走 如果是一个循环的话,fast 肯定会与 slow 在相遇 ,并且相等。 如果不是循环的话,那 fast.next 就肯定会先 等于 null;
while (fast != null && fast.next != null) { // 所以一定要判断两倍速度走的时候的下一个 fast.next 不为null
fast = fast.next.next;
slow = slow.next;
if (fast == slow) {
return true;
}
}
return false;
}
}

浙公网安备 33010602011771号