美文网首页
算法-如何判断一个单链表有环?

算法-如何判断一个单链表有环?

作者: zzq_nene | 来源:发表于2020-07-28 10:21 被阅读0次

方式一

基本思想,就是定义两个临时节点,分别指向链表的头节点,然后一个执行大循环,一个执行小循环,当出现两个节点引用相同的情况时,则说明出现了环。

    static class Node{
        public int data;
        public Node next;

        public Node(int data) {
            this.data = data;
        }
    }

    private static boolean hasLoop(Node node) {
        Node node1 = node;
        Node node2 = node.next;

        while (node2 != null) {
            if (node1 == node2) return true;
            // 继续迭代,temp1每次向后走一步,temp2每次向后走两步
            node1 = node1.next;
            node2 = node2.next.next;
            if (node2 == null) return false;
        }
        // 如果temp2位null,说明链表元素只有一个节点,一个节点认为是存在环
        return true;
    }

方式二

如果依靠HashMap或者HashSet集合来实现。HashSet是因为元素不能重复,而HashMap可以通过将Node作为key来实现,如果当前key存在value,说明已经出现了两次,则出现了环。

    private static boolean hasLoop1(Node head) {
        if (head == null) {
            return true;
        }
        Node next = head.next;
        HashSet<Node> hashSet = new HashSet<>();
        while (next != null) {

            if (hashSet.contains(next)) return true;
            hashSet.add(next);
            next = next.next;
            if (next == null) return false;
        }
        return true;
    }
    private static boolean hasLoop2(Node head) {
        Node next = head;
        HashMap<Node, Node> map = new HashMap<>();
        while (next != null) {
            if (map.get(next) != null) return true;
            map.put(next, next);
            next = next.next;
            if (next == null) return false;
        }
        return true;
    }

相关文章

  • 检测链表有环

    题目:如何判断一个单链表是否有环?若有环,如何找出环的入口节点。 一、单链表是否有环 思路分析: 单链表有环,是指...

  • 判断单链表是否有环、求环长和环入口最优算法

    判断单链表是否有环、求环长和环入口最优算法 判断单链表是否有环是一个十分经典的算法问题,许多考试或者面试都有很大的...

  • 2018-08-21

    算法题之判断单链表是否有环 判断单链表是否有环的算法核心思想是用两个指针,一个走的慢,一个走得快,如果两个相遇了则...

  • 链表

    现在有一个单向链表,谈一谈,如何判断链表中是否出现了环 考察点:链表参考回答:单链表有环,是指单链表中某个节点的n...

  • 小灰算法(一): 快慢指针求解链表是否有环

    文章参考自书籍:《漫画算法-小灰的算法之旅》-魏梦舒 如图是一个有环的单向链表,那么我们如何判断一个单向链表有环吗...

  • 判断单链表里面有没有环

    如何判断单链表里面是否有环? 这题基本是算法面试当中的经典题了。 暴力解法用一个指针遍历链表,每遇到一个节点就把他...

  • 算法题面试复习

    算法模块 1. 链表 1. 链表翻转 2. 单链表判断是不是环+求环位置+求环长度 以图片为例,假设环入口距离链表...

  • 数据结构&算法

    常见排序算法小结如何判断一个单链表是否有环?程序员必须知道的10大基础实用算法及其讲解排序算法总结 校招常考算法J...

  • 2022-02-27环形链表linked-list-cycle

    1.判断单链表是否有环 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续...

  • 单链表中存在环的相关问题Java实现

    问题描述 判断一个单链表是否有环? 如果存在环,如何得到环中节点的数目? 如果存在环,如何找到环的入口? 解题思路...

网友评论

      本文标题:算法-如何判断一个单链表有环?

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