题目描述
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
//两个指针,均指向链表头,一个一次走两步,一个一次一步,当相遇时必有环,且相遇点在环上
//相遇后,将一个指针重新指向链表头,然后两个指针同时前进一步,相遇点即为环的入口
public class Solution {
public ListNode EntryNodeOfLoop(ListNode pHead)
{
if(pHead==null || pHead.next==null)
return null;
ListNode p1 = pHead;
ListNode p2 = pHead;
while(p2!=null && p2.next!=null){
p1 = p1.next;
p2 = p2.next.next;
if(p1 == p2){
p1 = pHead;
while(p1!=p2){
p1 = p1.next;
p2 = p2.next;
}
return p1;
}
}
return null;
}
}