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

    题目描述

    给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
    /**
     * 
     * @author gentleKay
     * 题目描述
     * 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
     */
    
    public class Main54 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		
    	}
    	
    	 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 p1 = pHead;
            ListNode p2 = pHead;
            while (p2 != null && p2.next != null) {
            	p1 = p1.next; // 一个慢指针
            	p2 = p2.next.next; // 一个快指针   这样如果存在环的话一定会相遇 p1 == p2;
            	if (p1 == p2) {
            		p2 = pHead;  // 在设置一个指针,为慢指针。
            		while (p1 != p2) {
            			p1 = p1.next;
            			p2 = p2.next;
            		}
            		if (p1 == p2) { //一旦他们相等 就返回 这个结点
            			return p1;
            		}
            	}
            }
            return null;
        }
    
    }
    

      

  • 相关阅读:
    菜根谭#308
    菜根谭#307
    菜根谭#306
    菜根谭#305
    菜根谭#304
    菜根谭#303
    菜根谭#302
    菜根谭#301
    菜根谭#300
    菜根谭#299
  • 原文地址:https://www.cnblogs.com/strive-19970713/p/11200067.html
Copyright © 2011-2022 走看看