zoukankan      html  css  js  c++  java
  • 《剑指Offer》面试题56:链表中环的入口节点

    题目:一个链表中包含环,如何找出环的入口节点?

       1.首先判断该链表中是否存在环(使用快慢指针来判断);
       2.如果存在环,设环的节点为m个,快指针经过的节点数为2n个,慢指针经过的节点为n个,那么快指针所走的节点为n2比慢指针n1走的节点数多m(即2n=m+n)个,所以n1和n2相交的位置为链表的第n个节点,重置n1或者n2都可以找到环的入口。
    
    package com.test20160709;
    
    /**
     * Created by yan on 2016/7/9.
     */
    public class EntryNodeOfLoop {
    
        public class ListNode {
            int val;
            ListNode next = null;
    
            ListNode(int val) {
                this.val = val;
            }
        }
    
        public ListNode EntryNodeOfLoop(ListNode pHead)
        {
            if(pHead==null||pHead.next==null)
                return null;
            ListNode n1 = pHead;
            ListNode n2 = pHead;
            while (n2!=null&&n2.next!=null){
                n1 = n1.next;
                n2 = n2.next.next;
                if(n2==null)
                    return null;
                if(n1==n2)
                    break;
            }
            n1 = pHead;
            while (n1!=n2){
                n1 = n1.next;
                n2 = n2.next;
            }
            return  n1;
        }
    }
    
  • 相关阅读:
    Git 三种状态
    Git如何合并其它分支
    Git开发测试流程
    curl工具简介
    asp.net Forums 之HttpHandler和HttpModule
    WebRTC入门
    mac安装Homebrew
    iOS加载动态自定义字体
    My Frist in this frist!!
    javascript中直接取得DWR方法的返回值
  • 原文地址:https://www.cnblogs.com/yankang/p/6399029.html
Copyright © 2011-2022 走看看