题目描述
一个链表中包含环,请找出该链表的环的入口结点。
实现:
方法一:
public class Solution {
public ListNode EntryNodeOfLoop(ListNode pHead)
{
if(pHead==null){
return null;
}
ListNode p1=pHead;
ListNode p2=pHead;
while(p1!=null && p2!=null){
p1=p1.next;
p2=p2.next;
if(p2!=null){
p2=p2.next;
}
if(p1==p2){
break;
}
}
if(p2==null){
return null;
}
int count=1;
p2=p2.next;
while(p2!=p1){
p2=p2.next;
count++;
}
p1=pHead;
p2=pHead;
for(int i=0; i<count; i++){
p1=p1.next;
}
while(p1!=p2){
p1=p1.next;
p2=p2.next;
}
return p1;
}
}
方法二:
public class EntryNodeOfLoop {
public static ListNode entryNodeOfLoop(ListNode pHead){
if(pHead==null){
return null;
}
ListNode p1=pHead;
ListNode p2=pHead;
while(p1!=null && p2!=null){
p1=p1.next;
p2=p2.next;
if(p2!=null){
p2=p2.next;
}
if(p1==p2){
break;
}
}
if(p2==null){
return null;
}
p1=pHead;
while(p1!=p2){
p1=p1.next;
p2=p2.next;
}
return p1;
}
}