如何判断单链表是否有环

来源:互联网 发布:java ssh协议 编辑:程序博客网 时间:2024/05/17 04:40

方法一快慢节点的方式,如果快节点与慢节点相遇证明有环

    public int hasLoop(Node node) {        int hasLoop = 0;        Node node1 = node;        Node node2 = node;        while(node2 != null && node2.next != null) {            node1 = node1.next;            node2 = node2.next.next;            if(node1.equals(node2)) {//相遇证明有环                hasLoop = 1;                break;            }        }        return hasLoop;    }

方法二两个节点node1和node2,node2每次都从头开始走,看node1和node2走的步数是否一致,如果不一致存在环

    public int hasLoop2(Node node) {        int hasLoop = 0;        int pos1 = 0;        Node node1 = node;        while(node1 != null) {            Node node2 = node;            int pos2 = 0;            while(node2 != null) {                if(node2.equals(node1)) {//相遇                    if(pos1 != pos2) {//走过路径不一致证明有环                        hasLoop = 1;                        return hasLoop;                    }else {                        break;                    }                }                pos2++;                node2 = node2.next;            }            pos1++;            node1 = node1.next;        }        return hasLoop;    }
原创粉丝点击