检测链表中是否有环

作者: 王韩峰 | 来源:发表于2017-02-23 21:33 被阅读88次

在时间复杂度为O(n)、空间复杂度为O(1)的情况下,检测单向链表中是否存在环。

可以类比于操场跑步。假设两个人A、B在操场上跑步,A的速度是10,B的速度是20,两人同时从起点出发,会在起点再次相遇。利用这一点可证,用两个指针以不同的速度向后移动,如果存在环,它们一定会相遇,且满足时间复杂度和空间复杂度要求。

实现代码如下

//Node Class
package LinkList;

public class Node {
    public int val;
    public Node next;
    
    public Node() {
        // TODO Auto-generated constructor stub
        this.val = new Integer(-1);
        this.next = null;
    }
    
}

//main
import LinkList.Node;

public class Main {
    public boolean hasRing(Node head) {
        Node fast,slow;
        fast = slow = head;
        while (head.next!=null) {
            fast = fast.next.next;
            slow = slow.next;
            if (fast==slow) {
                return true;
            }
        }
        return false;
    }
    
    public static void main(String[] args) {
        Node node[];
        node = new Node[10];
        for (int i = 0; i < node.length; i++) {
            node[i] = new Node();
        }
        for(int i=0;i<9;i++){
            node[i].val = i;
            node[i].next = node[i+1];
        }
        node[9].next = node[7];
        node[9].val = 9;
        
        for (int i = 0; i < node.length; i++) {
            System.out.println(node[i].val + ":" + node[i].next.val);
        }
        
        boolean hasRing = new Main().hasRing(node[0]);
        System.out.println("是否存在环"+":"+hasRing);
    }

}

相关文章

  • 检测链表中是否有环

    在时间复杂度为O(n)、空间复杂度为O(1)的情况下,检测单向链表中是否存在环。 可以类比于操场跑步。假设两个人A...

  • 环形链表问题

    给定一个链表,判断链表中是否有环。存在环返回 true ,否则返回 false 分析: 该题可以理解为检测链表的某...

  • 单链表是否存在环

    面试题:如何检测一个单链表是否有环?如果有环的入口在哪里? 题目描述: 单链表有环指的是单链表中某个结点的next...

  • 正面刚算法-检测链中是否有环

    检测链表中是否存在环 通俗的讲检测链中的环就是看这个链表的遍历是否进入到一个环中,如果进入到环中,则会出现死循环,...

  • 算法面试:链表环的检测

    在有关链表的面试算法题中,检测链表是否有环是常见的题目。 给定一个链表,要求你判断链表是否存在循环,如果有,给出环...

  • 环检测算法(Floyd's Tortoise and H

    Cycle Detect 环检测算法常用检测链表是否有环,如果有环,给出环的长度和环的入口点。相关题目: 287....

  • Golang 数据结构练习——单链表找环

    问题:一个单向链表,怎样怎么检测是否有环,环的初始节点是什么?

  • 两个无限长度链表(也就是可能有环) 判断有没有交点

    给定单链表,检测是否有环。如果有环,则求出进入环的第一个节点。 判断单向链表是否有环,可以采用快指针与慢指针的方式...

  • 链表面试常见合集

    给定单链表,检测是否有环。如果有环,则求出进入环的第一个节点。 判断单向链表是否有环,可以采用快指针与慢指针的方式...

  • 链表结束篇:链表的五种常见操作

    链表结束篇:链表的五种常见操作 单链表翻转 检测一个链表中是否有环 两个有序的链表合并 删除链表倒数第 n 个结点...

网友评论

    本文标题:检测链表中是否有环

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