首页 > 编程语言 > 详细

算法练习(7)-判断单链表是否有环,以及求环的长度

时间:2021-03-27 22:12:14      阅读:19      评论:0      收藏:0      [点我收藏+]

技术分享图片

如上图,一个单链表,如何判断有没有环? 如果有,如何求环的长度?

如果面试时,遇到这个题目,先喝口水压压惊,回想一下,咱们小时候念小学时,数学老师最喜欢的一类题目:

技术分享图片

跑道上,2个运动员,1个速度是3m/s,1个速度是5m/s,同一起点起跑后,多久运动员2会再次遇到运动员1?是不是感觉异曲同工? 这2个速度不同的运动员,相当于就是快/慢2个指针

@Data
class Node {
    private String value;
    private Node next;

    public Node(String value) {
        this.value = value;
    }
}

@Test
public void isLoopLink() {
    Node a = new Node("a");
    Node b = new Node("b");
    Node c = new Node("c");
    Node d = new Node("d");
    a.next = b;
    b.next = c;
    c.next = d;
    d.next = b;

    int loopSize = 0, meetCount = 0;
    Node slow = a, fast = a;
    while (slow.next != null) {
        fast = fast.next.next;
        slow = slow.next;
        if (fast == null || slow == null) {
            System.out.println("it is not a loop link");
            break;
        }
        if (fast.value.equalsIgnoreCase(slow.value)) {
            //首次相遇
            meetCount += 1;
            if (meetCount > 1) {
                //再次相遇
                System.out.println("it is a loop link,loopSize:" + loopSize);
                break;
            }
        }
        if (meetCount == 1) {
            //首次遇到后,开始数环的节点个数
            loopSize += 1;
        }
    }
}

 

算法练习(7)-判断单链表是否有环,以及求环的长度

原文:https://www.cnblogs.com/yjmyzz/p/14586223.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!