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

    问题:

    给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。

    /*function ListNode(x){
        this.val = x;
        this.next = null;
    }*/
    function EntryNodeOfLoop(pHead)
    {
        // write code here
        let mNode = meetNode(pHead);//获得两个指针在环中相遇的节点,若为null,则该链表中没有环
        if(mNode == null){
            return null;
        }
        //如何得到环中节点的个数
        let number = 1;
        let p = mNode;
        while(p.next!=mNode){
            number++;
            p = p.next;
        }
        //再利用两个指针 一个先移动number步,然后两个指针再一起移动,直到两者相遇
        let p1 = pHead;
        for(let i=0;i<number;i++){
            p1 = p1.next;
        }
        let p2 = pHead;
        while(p1!=p2){
            p1 = p1.next;
            p2 = p2.next;
        }
        return p1;
    }
    function meetNode(pHead){
        if(pHead==null){
            return null;
        }
        let pSlow = pHead.next;
        if(pSlow==null){
            return null;//链表中只有一个节点 且没有环
        }
        let pFast = pSlow.next;
        while(pFast!=null&&pSlow!=null){
            if(pFast==pSlow){
                //如果两个指针相遇
                return pFast;
            }
            pSlow = pSlow.next;
            pFast = pFast.next;
            if(pFast!=null){
                pFast = pFast.next;
            }
        }
        //一直到链表尾两个指针都没有相遇
        return null;
    }
  • 相关阅读:
    Jzoj2682 最长双回文串
    Jzoj2682 最长双回文串
    【hdu3853】Loops
    【tyvj1015】【caioj1060】公路乘车
    【luogu1064】金明的预算方案
    【bzoj1260】【CQOI2007】涂色paint
    【UVa1629】Cake slicing
    【NYOJ746】整数划分(四)
    【NYOJ 15】括号匹配2
    【poj2955】Brackets
  • 原文地址:https://www.cnblogs.com/ZLDJ-15-516/p/11032193.html
Copyright © 2011-2022 走看看