给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
方法:
public class Solution {
public ListNode EntryNodeOfLoop(ListNode pHead)
{
ListNode last=isLoop(pHead);
if(last==null)
return null;
int i=1;
ListNode temp=last.next;
while(temp!=last){ //计算环长度
i++;
temp=temp.next;
}
ListNode front=pHead;
last=pHead;
for(int j=0;j<i;j++)
front=front.next;
while(last!=front){
last=last.next;
front=front.next;
}
return last;
}
public ListNode isLoop(ListNode pHead){
ListNode head=pHead,last=pHead;
while(head!=null && head.next!=null){
head=head.next.next;
last=last.next;
if(head==last)
break;
}
if(head==null || head.next==null)
return null;
return last;
}
}
方法:
public class Solution {
public ListNode EntryNodeOfLoop(ListNode pHead)
{
ListNode front=pHead,last=pHead;
while(front!=null && front.next!=null){
front=front.next.next;
last=last.next;
if(front==last)
break;
}
if(front==null || front.next==null){
return null;
}
front=pHead;
while(front!=last){
front=front.next;
last=last.next;
}
return front;
}
}