首页 > 编程语言 >算法题---判断链表中是否有环,并找出环的入口

算法题---判断链表中是否有环,并找出环的入口

时间:2024-06-20 19:54:31浏览次数:20  
标签:node --- head slow fast next 链表 有环

方案一、利用Set集合不会重复的原理

    boolean judgeCycle(Node head) {
        Set<Node> visited = new HashSet<>();
        Node node = head;
        while (node != null) {
            if (visited.contains(node))
                return true;
            visited.add(node);
            node = node.next;
        }
        return false;
    }

方案二、利用追逐算法,类似于定义两个指针,一个跑的快每次跑2步,一个跑得慢每次跑1步,如果有环那么这俩指针一定会相遇:

当两者相遇之后把跑得快的指向链表的头,然后每次跑一步,继续去追之前跑得慢的

   Node findCycleStartNode(Node head) {
        Node slow = head, fast = head;
        while (true) {
            if (fast == null || fast.next == null) return null;
            slow = slow.next;
            fast = fast.next.next;
            if (fast == slow) break;//到这里说明相遇了  那么就是有环
        }
//此时将跑得快的指向链表头,每次走一步,和跑得慢的再次相遇的位置就是环的入口,具体可以看示意图,因为链表头到环入口的距离等于第一次相遇点m1到环入口的距离, fast = head; while (slow != fast) { slow = slow.next; fast = fast.next; } return fast; }

 A到B的距离等于C到B的距离

 

标签:node,---,head,slow,fast,next,链表,有环
From: https://www.cnblogs.com/bimingcong/p/18259420

相关文章

  • 【代码】--库函数学习 ftp通信 相关
    1. FTP介绍 (1)主动模式(PORT): 服务器主动去连接客户端的数据端口 (2)被动模式(PASV): 客户端主动去连接服务器的数据端口ftp客户端通信流程(编程流程)如下:1.客户端用账号、密码进行登录。2.提交主动模式还是被动模式。3.如果是被动模式,需要去连接服务器开放的数据......
  • python数据分析-心脏瓣膜手术风险分析与预测
    一、研究背景和意义人的心脏有四个瓣膜,主动脉银、二尖、肺动脉和三尖源不管是那一个膜发生了病变,都会导致心脏内的血流受到影响,这就是通常所说的心脏期膜病,很多是需要通过手术的方式进行改善的。随着人口老龄化的加剧,,心脏期膜病是我国最常见的心血管疾病之-,需要接受心脏瓣......
  • 算法题---五个线程排序输出
    1、五个线程编号1、2、3、4、5,每个线程的执行完成时间不确定,要求按照排号顺序输出各个线程的结果,并且不能等所有线程执行完毕再排序输出,比如线程2先于线程1执行完了此时还不能输出。要等线程1输出完之后才能输出,其他线程以此类推方案一、利用所得传递,创建五把锁lock1、2、3、4......
  • 第二章 - 第1节- 逻辑运算 - 课件
    1.逻辑运算符优先级以下是C++运算符的优先级表格,从高到低排列:优先级运算符描述结合性1::作用域解析从左到右2()[]->.函数调用、数组下标、成员访问从左到右3!~++--+-*&(type)sizeof逻辑非、按位取反、自增/自减、正/负号、间接......
  • 3、双分支判断 - 课件
    一、双分支的基本语法结构双分支结构,也称为if-else语句,其基本语法如下:if(判断表达式){//条件为真时执行的代码块}else{//条件为假时执行的代码块}说明:判断表达式是一个布尔表达式,它的值为真(true)或假(false)。如果判断表达式的值为真,执行if后......
  • 第二章 - 第1节- 逻辑运算 -课后习题
    习题练习第一题若P=true,Q=false,R=true,则逻辑表达式(P∧Q)∨(¬P∧R)的值为:A.trueB.falseC.0D.1第二题设A={1,2,3,4},B={2,4,6},则A∩(B∪{3,5})的结果为:A.{1,2,3,4,5,6}B.{2,3,4}C.{2,4}D.{3}第三题......
  • 2、拆位练习 - 课件
    基础知识一、拆位原理除法运算符/的拆位用法在拆位中,我们可以用除法运算符/来获取一个数字的高位部分。具体来说,就是用这个数字去除以一个适当的倍数(通常是10的幂),得到的商就是高位部分。例如,假设我们有一个数字n=1234,我们想要获取它的百位及以上的部分,就......
  • 微信小程序毕业设计-教学质量评价系统项目开发实战(附源码+论文)
    大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。......
  • 微信小程序源码-基于Java后端的教学质量评价系统的计算机毕业设计(附源码+论文)
    大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。......
  • SAdb项目第二章-PySide6&&designer基础配置及应用
    接上文,本章来说说designer如何使用,并且如何转换成py文件打开designer控制台输入pyside6-designer就能打开创建一个Widget窗口打开后会自动弹出新建窗体选择Widget创建即可。也可以通过左上角的文件新建一个:designer简介desinger中的控件区域有各种控件......