首页 > 编程语言 >每日算法----环形链表II(Java)

每日算法----环形链表II(Java)

时间:2024-12-29 19:29:38浏览次数:8  
标签:---- slow Java 环形 fast next 链表 ListNode 指针

本题在上个环形链表的基础上增加了难度,让找其环形链表的第一个节点

还是原先的思路,定义快慢指针

在第一次快慢指针相等时,a是到环形前的节点个数,k是离环形节点有多远

快指针走了a+n圈环形+k

慢指针走了a+m圈环形+k

此时快指针走的路程是慢指针2倍。慢指针= 快指针-慢指针 = n圈环形 ,这里的n的值和上面n不一样,你们懂我意思就可以

从起点开始算a+n圈环形就是环形链表的起始节点所以,此时慢指针在加上a的长度就可以找到起始节点,可以将快指针变成头节点,每次和慢指针一样都只走一步

public class A07detectCycle {
    
    public ListNode detectCycle(ListNode head) {
        ListNode slow  = head;
        ListNode fast  = head;
        while (fast != null && fast.next!= null){
                slow = slow.next;
                fast = fast.next.next;
                if (slow == fast){
                    fast = head;//将快指针从头节点重新遍历
                    while (slow != fast){
                        slow = slow.next;
                        fast = fast.next;
                    }//完成对慢指针加a
                    return slow;
                }
            }
        return null;
    }
 class ListNode {
        int val;
        ListNode next;
        ListNode() {
        }
        ListNode(int val) {this.val = val;}
        ListNode(int val, ListNode next) {this.val = val;this.next = next;}
    }
}

标签:----,slow,Java,环形,fast,next,链表,ListNode,指针
From: https://blog.csdn.net/m0_74117790/article/details/144808318

相关文章

  • 每日算法----环形链表(Java)
    快慢指针慢指针一次走一步,快指针一次走两步,环形链表,最后一定会碰到。publicclassA06hasCycle{publicbooleanhasCycle(ListNodehead){ListNodeslow=head;//慢指针ListNodefast=head;//快指针//快指针不为null且下一个节点......
  • 如何使用Python从SACS结构数据文件中提取构件组数据信息并导出
    SACS是一种广泛用于结构分析和设计的软件系统,其数据文件格式常用于存储结构模型和分析结果。本文将介绍如何从一个复杂的SACS文件中提取关键信息,并将其整理成易于理解的表格格式。我们将关注SACS文件中的一个部分,名为“GRUP”,它包含了结构组的数据。我们将学习如何......
  • 【MySQL】表的约束
    表的约束一、介绍二、空属性1、介绍2、使用场景3、注意事项4、示例三、默认值约束(DEFAULT)四、列描述(COMMENT)1、介绍2、注意事项3、示例五、ZEROFILL1、介绍2、应用场景3、示例六、主键约束(PRIMARYKEY)1、介绍2、语法3、示例七、自动递增约束(AUTO_INCREMENT)1、介绍2、......
  • 一棵哈夫曼树共有127个结点,对其进行哈夫曼编码,共能得到()个字符的编码
    哈夫曼树与哈夫曼编码的故事想象你是一位邮递员,你的工作是在一个小镇上传递信件。这个小镇上有很多户人家,但每家的信件量都不同。为了更高效地完成工作,你想到了一个办法:给每家分配一个独特的代码,这样你就可以更快地识别出信件应该送到哪家。这个独特的代码就是哈夫曼编码。而......
  • spring boot @ansy 底层异步线程原理代码简要说明及代码示例
    在SpringBoot中,使用@Async注解可以非常方便地实现方法的异步调用。其底层是基于Spring的TaskExecutor实现的。以下是@Async异步线程原理的简要说明及代码示例。原理1.注解声明:在需要异步执行的方法上使用@Async注解。2.配置启用:在主类或配置类上启用异步支持,通过添加......
  • 《数据结构》期末考试测试题【上】
    数据结构测试题1.数据结构是指什么?2.某语句时间复杂为?3.关于数据结构的说法那个正确?4.一个算法的评价标准包括哪些方面?5.时间复杂度指的是什么?6.算法的重要特征有那些?7.某语句时间复杂为?8.存储数据时要存储什么?9.某语句时间复杂为?10.某语句时间复杂为?11.某二叉树的遍历......
  • 初识网络IO
    目录初识IO什么是IO流IO流的作用IO流的分类IO流实战应用深入分析Java中的IO流IO流的数据来源本地磁盘文件操作之File类File类基本操作文件的字节输入输出流基于内存的字节输入输出流基于缓存流的输入输出flush方法序列化和反序列化序列化与反序列化的概念核心......
  • C# OpenCV机器视觉:漫水填充
    在一个阳光灿烂得简直要闪瞎人眼的下午,阿强正在实验室里和他的那些宝贝仪器们“谈情说爱”,捣鼓他的最新宝贝项目——一个智能得仿佛能看穿一切的图像处理系统。突然,“砰”的一声,门被撞开了,他的好朋友小李像个没头苍蝇似的冲了进来,脸上的焦虑都快溢出来了,仿佛下一秒就要原地......
  • 最新智能科学与技术专业毕业设计选题推荐 2025
    目录毕设选题选题迷茫选题的重要性更多选题指导最后     大四是整个大学期间最忙碌的时光,一边要忙着准备考研,考公,考教资或者实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。大四的同学马上要开始毕业设计,对选题有疑问可以问学长哦!以下......
  • Midjourney技术浅析(五):图像细节处理
    Midjourney 作核心目标之一是生成高质量、高分辨率且细节丰富的图像。为了实现这一目标,Midjourney 采用了超分辨率(Super-Resolution)和细节增强(DetailEnhancement)技术。本文将深入探讨Midjourney的超分辨率与细节增强模块,包括生成对抗网络(GAN)、卷积神经网络(CNN)、图像滤波(Im......