码迷,mamicode.com
首页 > 其他好文 > 详细

*链表中环的入口结点

时间:2019-03-11 13:26:49      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:next   bsp   移动   class   判断   head   就是   链表   fast   

弄懂了思路:

首先判断是否为环:快慢指针,快是慢的两倍,如果相遇则有环;此时两个指针走的路程差就是环的长度或长度的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;
    }
}

*链表中环的入口结点

标签:next   bsp   移动   class   判断   head   就是   链表   fast   

原文地址:https://www.cnblogs.com/dyq19/p/10509879.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!