链表中环的入口结点【剑指offer——JAVA实现】

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:53   1286   0

题目描述

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

 public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}

解题思路:利用指针遍历等方法较为复杂,可以用特殊的数据结构来帮助解决。

找到环的入口 = 找到一个已经遍历过而又即将再次被遍历的节点 = 将已经遍历的节点放在一边,每次要遍历下一个节点的时候都先看看是否已经遍历过

要实现上面这个过程,最简单高效的数据结构就是Set。我们可以利用Set中元素不相同的特点。

代码实现:

import java.util.Set;
import java.util.HashSet;
public class Solution {

    public ListNode EntryNodeOfLoop(ListNode pHead)
    {
        Set<ListNode> set = new HashSet();
        
        while(pHead != null) {
            if(!set.add(pHead)) {
                //添加失败,说明集合中已经存在该元素,返回该值
                return pHead;
            }
            pHead = pHead.next;
        }
        
        return null;
    }
}
更多算法解答请点击 《剑指offer》66题JAVA代码算法实现全集
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP