拆节点:

从头开始拆
把拆掉的节点指向一个公共点
如果有环最后会走到那个公共点上

public ListNode EntryNodeOfLoop(ListNode pHead)
    {
        if(pHead==null) return null;

        ListNode customizedNode=new ListNode(Integer.MIN_VALUE);

        ListNode p=null;//p->待拆节点
        while(pHead.next!=null)
        {
            p=pHead;
            pHead=pHead.next;//pHead->剩下链表的头
            p.next=customizedNode;//把节点拆掉指向公共点
        }

        //如果有环:最后pHead->公共点,p->入口节点
        if(pHead==customizedNode) return p;
        return null;
    }

时间复杂度:O(n)