美文网首页
23.链表中环的入口节点

23.链表中环的入口节点

作者: ___Qian___ | 来源:发表于2019-03-15 09:27 被阅读0次

    题目

    一个链表中包含环,请找出该链表的环的入口节点。

    思路

    1.先判断链表中是否包含环 (快慢指针)
    node1,node2指向头结点,node1每次向前移动1步,node2每次向前移动2步,若出现node1==node2,则有环,若node2==null,则无环
    2.若链表中存在环,寻找环的入口节点
    在1基础上,node2保持不动,node1指向头结点,然后node1和node2同时向前移动1步,当node1==node2时,则为环的入口节点(画图容易理解)

    public class Solution {
        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;
                if(p1 == p2){      //相遇
                    //有环
                    p2 = pHead;      //指向链表头结点
                    while(p1 != p2){
                        //同时走
                        p1 = p1.next;
                        p2 = p2.next;
                    }
                    if(p1 == p2)      //相遇
                       //环的入口点
                        return p1;
                }
            }
            return null;
        }
    }
    

    相关文章

      网友评论

          本文标题:23.链表中环的入口节点

          本文链接:https://www.haomeiwen.com/subject/axwkmqtx.html