题目描述
一个链表中包含环,请找出该链表的环的入口结点。
快慢指针解法:
/**
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
**/
public class Solution {
public ListNode EntryNodeOfLoop(ListNode pHead)
{
if(pHead==null||pHead.next==null)
return null;
ListNode slow=pHead;//慢指针
ListNode fast=pHead;//快指针
while(fast!=null&&fast.next!=null)
{
slow=slow.next;
fast=fast.next.next;
if(slow==fast)//第一次相遇
{
slow=pHead;//慢指针从头开始;
//此时快指针fast在第一次相遇的节点
while(slow!=fast)
{
slow=slow.next;
fast=fast.next;
}//第二次相遇则为环入口节点
if(slow==fast)
return slow;
}
}
return null;
}
}