思路

  • 快慢指针法:快指针每时间走2个指针长度,慢指针走一个,第一次相遇,让一个指针回头链表头,两个指针速度均为1,从头再走
  • Set集合,当有第一个重复时候,就是入口节点

代码

public class Solution {

    public ListNode EntryNodeOfLoop(ListNode pHead)
    {if(pHead.next==null|| pHead.next==null||pHead.next.next==null){return null;}
        ListNode p1=pHead.next;
        ListNode p2=pHead.next.next;
        //第一次相遇
        while(p1!=p2){
            p1=p1.next;
            p2=p2.next.next;
        }

        p1=pHead;
     while(p1!=p2){
         p1=p1.next;
         p2=p2.next;
     }
     return p1;
    }
}