题目
一个链表中包含环,请找出该链表的环的入口结点。
分析
首先检查该链表是否为环,设置一个快指针fast,每次走两步,一个慢指针slow,每次走一步。若fast==null或fast.next==null,表示不存在环;当fast==slow时,存在环。
将fast指向链表头,每次走一步,slow还是每次走一步,当fast与slow相遇时,即为环的入口结点。
代码
1 public ListNode EntryNodeOfLoop(ListNode pHead){ 2 if(pHead==null) 3 return null; 4 ListNode slow = pHead, fast = pHead; 5 while(true){ 6 if(fast==null) 7 return null; 8 slow = slow.next; 9 fast = fast.next.next; 10 if(slow==fast) 11 break; 12 } 13 fast = pHead; 14 while(fast!=slow){ 15 fast = fast.next; 16 slow = slow.next; 17 } 18 return fast; 19 }
来源:https://www.cnblogs.com/jiqianqian/p/6951651.html