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


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

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

    跑道上,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;
            }
        }
    }
    
    作者:菩提树下的杨过
    出处:http://yjmyzz.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    PAT A1094 The Largest Generation (25 分)——树的bfs遍历
    PAT A1055 The World's Richest (25 分)——排序
    PAT A1052 Linked List Sorting (25 分)——链表,排序
    PAT A1076 Forwards on Weibo (30 分)——图的bfs
    辅导员
    辅导员面试
    C程序设计
    Excel VBA 基本概念
    Excel函数
    导入excel表的数据到数据库ssh
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/14586223.html
Copyright © 2020-2023  润新知