题目描述
一个链表中包含环,请找出该链表的环的入口结点。
public class Solution {
ListNode MeetingNode(ListNode pHead){
if(pHead==null) return null;
ListNode slow = pHead;
if(slow==null)
return null;
ListNode fast = slow.next;
while(fast!=null && slow!=null){
if(fast == slow)
return fast;
slow = slow.next;
fast = fast.next;
if(fast!=null)
fast = fast.next;
}
return null;
}
public ListNode EntryNodeOfLoop(ListNode pHead)
{
ListNode meetNode= MeetingNode(pHead);
if(meetNode==null)
return null;
ListNode pNode = meetNode;
pNode = pNode.next;
int count = 1;
while(pNode!=meetNode){
pNode = pNode.next;
count++;
}
int index = 0;
ListNode fast = pHead;
ListNode slow = pHead;
for(int i=0; i<count; i++){
fast = fast.next;
}
while(fast!=slow){
fast = fast.next;
slow = slow.next;
}
return fast;
}
}
**思路:分3步,分别为:
1、判断链表中是否有环,并返回环中的一点
2、利用两个指针,一个指针先走到和链表中环结点数相同的步数,然后两个指针一起走,相遇的点就是环的入口结点
3、如果知道环的长度,利用第一步得到的结点,一直走走到回到起始点,那么就知道了环的长度**