链表判环

来源:互联网 发布:centos 下载工具 编辑:程序博客网 时间:2024/06/15 15:00

如何判断一个单链表是否有环?有环的话返回进入环的第一个节点的值,无环的话返回-1。


从链表头节点开始遍历,一个快速每次2个单位,一个慢每次一个单位,如果过程中出现相等就代表有环,此时慢遍历依然照常遍历,另从头节点开始另一个慢遍历,前后两次慢遍历出现相等时,就是入环的第一个


/*public class ListNode {    int val;    ListNode next = null;    ListNode(int val) {        this.val = val;    }}*/public class ChkLoop {    public int chkLoop(ListNode head, int adjust) {        if (head == null) {            return -1;        }        if (head.next == null || head.next.next == null                || head.next.next.next == null) {            return -1;        }        ListNode fast = head.next.next, slow = head.next;        while (fast != null && fast != slow) {            fast = fast.next != null ? fast.next.next : null;            slow = slow.next;        }        if (fast == null) {            return -1;        }        fast=head;        while(fast!=slow){            fast=fast.next;            slow=slow.next;        }        return fast.val;    }}
0 0
原创粉丝点击