题目描述
一个链表中包含环,请找出该链表的环的入口结点。
1.双指针法
思路:1.定义p1,p2指针刚开始都指向头节点。
2.p1一次走1步,而p2一次走两步。
3.当p1,p2再次相遇时,将p2指向头节点pHead,然后让p1,p2都以每次一步的移动。再次相遇时,即为环的入口节点。
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){
p2=pHead;
while(p1!=p2){
p1=p1.next;
p2=p2.next;
}
return p1;
}
}
return null;
}
}