Given a linked list, return the node where the cycle begins.
If there is no cycle, return
null
.
For example:
Given
-21->10->4->5
, tail connects to node index 1,return 10
/**
* Definition for ListNode.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int val) {
* this.val = val;
* this.next = null;
* }
* }
*/
/*
time:O(n), space:O(1)
*/
public class Solution {
public ListNode detectCycle(ListNode head) {
if (head == null) {
return head;
}
ListNode slow = head;
ListNode fast = head.next;
while (slow != fast) {
if (fast == null || fast.next == null) {
return null;
}
slow = slow.next;
fast = fast.next.next;
}
while (head != slow.next) {
head = head.next;
slow = slow.next;
}
return head;
}
}
No comments:
Post a Comment