*链表中环的入口结点

Posted dyq19

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了*链表中环的入口结点相关的知识,希望对你有一定的参考价值。

弄懂了思路:

首先判断是否为环:快慢指针,快是慢的两倍,如果相遇则有环;此时两个指针走的路程差就是环的长度或长度的n倍;

头到入口:a;环长度:b;相遇点到入口:c; 则 2*(a+b-c) = a+b+b-c; 得a=c; 即头到入口=相遇点到入口。

将快指针指向头,相同速度移动,遇到即为入口结点。

public class Solution {

    public ListNode EntryNodeOfLoop(ListNode pHead)
    {
        //先判断有没有环:快慢指针,快=2*慢,如果相遇有环
        ListNode fast = pHead;
        ListNode slow = pHead;
        while(fast != null && fast.next != null){
            fast = fast.next.next;
            slow = slow.next;
            if(fast == slow){
                fast = pHead;
                while(fast != slow){
                    fast = fast.next;
                    slow = slow.next;
                }
                return slow;
            }
        }
        return null;
    }
}

以上是关于*链表中环的入口结点的主要内容,如果未能解决你的问题,请参考以下文章

链表中环的入口结点

链表中环的入口结点

牛客网高频算法题系列-BM7-链表中环的入口结点

55.链表中环的入口结点

剑指offer 55. 链表中环的入口结点

53链表中环的入口结点