拆节点:
从头开始拆
把拆掉的节点指向一个公共点
如果有环最后会走到那个公共点上
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)