zoukankan      html  css  js  c++  java
  • 判断单链表是否成环

    成环:

    可以是循环单链表,即首位相连;也可以是部分成环,即尾部和其他节点相连。

    判断是否成环:

    使用快慢指针遍历链表:

    慢指针:

    从头节点开始,一次跳一个节点。

    快指针:

    从头节点开始,一次跳两个节点。

    如果是成环的,这两个指针一定会相遇。

    如上图所示,蓝色表示慢指针,红色表示快指针,他们在经过4次遍历后相遇,也就是成环的。若不成环,则快指针一定先到尾部(若快慢指针起点相同)。

    代码实现:

        public static void main(String[] args) {
            Node node1 = new Node(1);
            Node node2 = new Node(2);
            Node node3 = new Node(3);
            Node node4 = new Node(4);
            Node node5 = new Node(5);
            Node node6 = new Node(6);
            node1.next = node2;
            node2.next = node3;
            node3.next = node4;
            node4.next = node5;
            node5.next = node6;
            node6.next = node3;
    
            Node node  = node1;
            System.out.println(isCyc(node1));//输出true
        }
    
        private static boolean isCyc(Node node){
            Node slow = node;
            Node fast = node;
            while (slow!=null&&fast!=null){
                slow = slow.next;
                fast = fast.next.next;
                if(slow==fast)
                    return true;
            }
            return false;
        }
    
        static class Node{
            int value;
            Node next;
            Node(int value){
                this.value = value;
            }
        }
  • 相关阅读:
    简单好用的日历排期控件
    Ext.js create store
    Ext.js页面添加元素
    Ext.js Tree
    前端设计的七大法则
    如何写软件开发相关文档,它包含哪些种类和内容
    行内文字末尾下降
    正则表达式
    滚动加载数据
    location.hash来保持页面状态
  • 原文地址:https://www.cnblogs.com/cnsec/p/13286656.html
Copyright © 2011-2022 走看看