题目描述
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
暂时想不到怎么用一步两步的指针出来,就直接暴力
public ListNode EntryNodeOfLoop(ListNode pHead){
HashSet<ListNode> set=new HashSet<>();
ListNode p=pHead;
while (p!=null){
if(!set.contains(p)){
set.add(p);
}else {
return p;
}
p=p.next;
}
return null;
}
正确的做法
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)
{
p1=pHead;
while(p1!=p2)
{
p1=p1.next;
p2=p2.next;
}
if(p1==p2)return p1;
}
}
return null;
}
}
恍然大悟,都走了一半,然后在让两个指针相同速度走就回到入口点