题目描述:
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
题解:
(1)设置一个快指针,一个慢指针。
(2)快指针一次走两步,慢指针一次走一步。如果是循环链表,那么两指针终会相遇。
(3)相遇后,重新指定一个指针从链表头开始走,另一个指针从相遇点开始走,再次相遇的点就是入环点。
public ListNode EntryNodeOfLoop(ListNode pHead){
ListNode fast = pHead;
ListNode slow = pHead;
while(fast != null && fast.next != null ){
fast = fast.next.next;
slow = slow.next;
if(fast == slow){
break;
}
}
ListNode p = pHead;
ListNode q = slow;
while(p != null){
p = p.next;
q = q.next;
}
return p;
}