题目描述
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
思路:先判断是否有环,用快慢指针,快是慢的2倍,若是有环一定会相遇。
然后让一个指针从head出发,一个从相遇点出发,步长都是1,这两个指针的相遇点就是环的入口。
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ListNode EntryNodeOfLoop(ListNode pHead)
{
if(pHead==null) return null;
ListNode a=pHead,b=pHead;
boolean flag=false;
while(b!=null&&b.next!=null){
a=a.next;
b=b.next.next;
if(a==b){
flag=true;
break;
}
}
if(!flag) return null;
a=pHead;
while(a!=b){
a=a.next;
b=b.next;
}
return a;
}
}