剑指offerNo55. 链表中环的入口结点(Java)

僤鯓⒐⒋嵵緔 提交于 2020-03-01 05:55:29

题目描述:

给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。

思路:

思路1:设置快慢指针,刚开始快慢指针同时指向某一个节点,然后进行next,当快慢指针再次相遇的时候,说明该链表有环。

思路2:使用HashSet存储节点,遍历将节点加入hashSet,如果存在环,那么入口节点就是那个在HashSet里第一个重复的节点。下面是思路2的代码。(思路1的代码leetcode刷题列表里有)

代码:

package offer01;

import java.util.HashMap;
import java.util.HashSet;

public class TestNo55 {
    static class ListNode{
        int val;
        ListNode next;
        ListNode(int val){
            this.val = val;
        }
    }
    public static void main(String[] args) {
        ListNode node = new ListNode(0);
        ListNode node1 = new ListNode(1);
        ListNode node2 = new ListNode(3);
        ListNode node3 = new ListNode(4);
        node.next = node1;
        node1.next = node2;
        node2.next = node3;
        node3.next = node;
        System.out.println(new TestNo55().EntryNodeOfLoop(node).val);
    }
    public ListNode EntryNodeOfLoop(ListNode pHead)
    {
        HashSet<ListNode> set = new HashSet<>();
        while (pHead != null){
            if(set.contains(pHead)){
                return pHead;
            }
            set.add(pHead);
            pHead = pHead.next;
        }
        return null;
    }
}

天越黑,星星越亮  ..

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!