zoukankan      html  css  js  c++  java
  • *链表中环的入口结点

    弄懂了思路:

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

  • 相关阅读:
    hdoj 3599 最小费用最大流
    poj 2516 最小费用最大流
    poj 3281 最大流拆点
    poj 3436 网络最大流加打印路径
    邻接表模板
    hdu 2102 搜索
    hdoj 1533 最小费用最大流
    HDU 1231 最大连续子序列
    NYOJ 2 括号配对问题
    POJ 1163 / NYOJ 16 The Triangle(数字三角形)
  • 原文地址:https://www.cnblogs.com/dyq19/p/10509879.html
Copyright © 2011-2022 走看看