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;
            }
        }
  • 相关阅读:
    oracle11g安装客户端检查先决条件失败
    WinForm textbox 只允许输入数字
    Oracle存储过程
    Oracle游标
    Oracle之PL/SQL流程控制
    Oracle 变量
    log4net 使用
    Python Matplotlib 画图显示中文问题
    Oracle 数据迁移到 SQL Server
    C结构体【转】
  • 原文地址:https://www.cnblogs.com/cnsec/p/13286656.html
Copyright © 2011-2022 走看看