题目:找出链表中环的开始位置
题解:使用快慢指针,当快指针不为空时,
①快指针走两步,慢指针走一步
②判断是否相遇
相遇的话,让快指针从头再和慢指针一块走,直到相遇
/*链表中环的入口
* 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
* */
public ListNode EntryNodeOfLoop(ListNode pHead) {
if(pHead == null || pHead.next == null) {
return null;
}
ListNode fast = pHead;
ListNode slow = pHead;
while(fast != null) {//判断有没有环
//先同时走
fast = fast.next.next;
slow = slow.next;
//再判断是否相同
if(fast == slow) {
//快指针从头开始走
fast = pHead;
while(fast != slow) {
fast = fast.next;
slow = slow.next;
}
return fast;
}
}
//若果没有,就返回null;
return null;
}