Given a linked list, return the node where the cycle begins. If there is no cycle, return null.
Follow up:
Can you solve it without using extra space?
public class LinkedListCycle
{
//节点数据结构
static class ListNode
{
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
public static ListNode detectCycle(ListNode head)
{
if(null == head)
{
return null;
}
//快慢指针
ListNode _slow = head;
ListNode _fast = head;
while(null != _fast.next && null != _fast.next.next)
{
_slow = _slow.next;
_fast = _fast.next.next;
//快慢指针相遇,说明有环
if(_slow == _fast)
{
ListNode _node1 = head;
ListNode _node2 = _fast;
while(_node1 != _node2)
{
_node1 = _node1.next;
_node2 = _node2.next;
}
return _node1;
}
}
return null;
}
}