剑指Offer:链表中环的入口结点 (java代码实现)

题目描述
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
解题思路
先定义一个慢指针一个指针 一个走一步一个走2步
如果2个指针相遇了说明改链表有环 此时记录下该相遇结点

最后一步 让头节点指针和相遇结点指针一起走 相遇点就是入环点
至于最后一步不需要知道为什么 记住就行 有公式

下面是java代码实现

public class Solution {

    public ListNode EntryNodeOfLoop(ListNode pHead) {
        ListNode less = pHead;
        ListNode more = pHead;
        ListNode meetNode = null;
        while(more != null && more.next != null) {
            
            less = less.next;
            more = more.next.next;
            if(less == more) {
                meetNode = less;
                break;
            }
        }
        while (pHead != null && meetNode != null) {
            if (pHead == meetNode) {
                return meetNode;
            }
            pHead = pHead.next;
            meetNode = meetNode.next;
        }
        return null;
        
    }
}

猜你喜欢

转载自blog.csdn.net/wmh1152151276/article/details/88145721