zoukankan      html  css  js  c++  java
  • 2.给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。

     

    //思路:1.判断链表中有环 -> 2.得到环中节点的数目 -> 3.找到环中的入口节点
    public class Solution {
     
        public ListNode EntryNodeOfLoop(ListNode pHead)
        {
            if(pHead == null){
                return null;
            }
            // 1.判断链表中有环
            ListNode l=pHead,r=pHead;
            boolean flag = false;
            while(r != null && r.next!=null){
                l=l.next;
                r=r.next.next;
                if(l==r){
                    flag=true;
                    break;
                }
            }
            if(!flag){
                return null;
            }else{
                // 2.得到环中节点的数目
                int n=1;
                r=r.next;
                while(l!=r){
                    r=r.next;
                    n++;
                }
                // 3.找到环中的入口节点
                l=r=pHead;
                for(int i=0;i<n;i++){
                    r=r.next;
                }
                while(l!=r){
                    l=l.next;
                    r=r.next;
                }
                return l;
            }
     
        }
    }
    /*fast一次走2步,slow一次走一步,如果该链表有环,两个指针必然在环内相遇
    此时只需要把其中的一个指针重新指向链表头部,另一个不变(还在环内的相遇点),
    这次两个指针继续走,一次走一步,相遇的地方就是入口节点*/
    /*
     public class ListNode {
        int val;
        ListNode next = null;
    
        ListNode(int val) {
            this.val = val;
        }
    }
    */
    public class Solution {
    
        public ListNode EntryNodeOfLoop(ListNode pHead)
        {
            ListNode fast=pHead,slow=pHead;
            while(fast!=null&&fast.next!=null){
                fast=fast.next.next;
                slow=slow.next;
                if(slow==fast){
                    break;
                }
            }
            if(fast==null||fast.next==null)
                return null;
            fast=pHead;
            while(fast!=slow){
                slow=slow.next;
                fast=fast.next;
            }
            return fast;
        }
    }
  • 相关阅读:
    PHP函数
    git (1)
    JavaScript(4)
    javascript-DOM(3)
    JavaScript-DOM(2)
    [转]分布式架构知识体系
    Mysql中查看每个IP的连接数
    Git常用命令备忘录
    windows下用vscode写C++
    sudo cd为什么不能够执行?
  • 原文地址:https://www.cnblogs.com/xuechengmeigui/p/12613633.html
Copyright © 2011-2022 走看看