Given a linked list, return the node where the cycle begins. If there is no cycle, return null
.
Note: Do not modify the linked list.
Follow up:Can you solve it without using extra space?
Solution:
思路,用141的思路判断有环后令另一个指针从 head 开始与 slow以1的速度同步行走,他们将正好相会在环入口Node 处。
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution
{
public ListNode detectCycle(ListNode head)
{
if(head == null)
return null;
ListNode slow = head;
ListNode fast = head;
ListNode entry = head;
while(fast.next != null && fast.next.next != null)
{
slow = slow.next;
fast = fast.next.next;
if(slow == fast)
{
while(entry != slow)
{
entry = entry.next;
slow = slow.next;
}
return entry;
}
}
return null;
}
}
网友评论