【链表】Leetcode 142. 环形链表 II【中等】

环形链表 II

给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。

不允许修改 链表。

示例1:
在这里插入图片描述
输入:head = [3,2,0,-4], pos = 1
输出:返回索引为 1 的链表节点
解释:链表中有一个环,其尾部连接到第二个节点。

解题思路

  • 1、使用快慢指针确定链表是否有环。

  • 2、如果链表有环,则通过数学推导找到环的起点。
    关键理解点梳理

  • (1)快指针比慢指针多走了环的整数倍的距离,这是由于快慢指针的移动速度差异所导致的

  • 在快慢指针相遇之前,快指针每次移动的步数都是慢指针的两倍。

  • 当快慢指针进入环中后,它们在环内以不同的速度移动。

  • 快指针每次移动两步,慢指针每次移动一步,那么在环内,快指针比慢指针每次多走一步。

  • 如果它们能在环中相遇,快指针一定比慢指针多走了环的整数倍的距离。
    f=快指针走的路程 s=慢指针走的路程 b环的路程 a入口到环的距离
    f = 2s f=s+nb 得s = nb

  • (2)如果让指针从链表头部一直向前走并统计步数k ,而k=走到链表入口节点时的步数 则k=a+nb

  • 而目前 slow 指针走了 nb 步。因此,我们只要想办法让 slow 再走 a 步停下来,就可以到环的入口

  • 刚好a是入口到环的距离,慢指针可以和head一起慢走,他们相遇时,

  • 一定是都走了a,入口也就找到了

a、b 环示例图:
在这里插入图片描述

Java实现

public class LinkedListCycleII {

static class ListNode {
        int val;
        ListNode next;
        ListNode(int x) {
            val = x;
            next = null;
        }
    }
    
    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) {
                // 有环,重新从头和相遇点开始找环的起始点
                //head节点到环入口长度为a 
                fast = head;
                while (slow != fast) {
                    slow = slow.next;
                    fast = fast.next;
                }
                return slow; // 返回环的起始点
            }
        }

        // 链表中没有环
        return null;
    }

    public static void main(String[] args) {
        LinkedListCycleII solution = new LinkedListCycleII();

        // 示例:创建有环链表
        ListNode head = new ListNode(3);
        ListNode node1 = new ListNode(2);
        ListNode node2 = new ListNode(0);
        ListNode node3 = new ListNode(-4);

        head.next = node1;
        node1.next = node2;
        node2.next = node3;
        node3.next = node1; // 形成环

        ListNode result = solution.detectCycle(head);

        if (result != null) {
            System.out.println("环的起始节点值为:" + result.val);
        } else {
            System.out.println("链表中无环。");
        }
    }
}

时间空间复杂度

  • 时间复杂度:O(n),其中 n 是链表的长度。
  • 空间复杂度:O(1),只需要使用常数级别的额外空间

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/471628.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ruoyi-activiti添加用车申请流程(二)

实体类Car中必须要有String userId属性。 设置自定义表单为system/car/deptleadercheck: 然后在CarController中编写system/car/deptleadercheck对应的函数: GetMapping("/deptleadercheck")public String deptleadercheck(String taskid, M…

学习总结!

最近主要学习了java&#xff0c;题目的话就写了两道。 这道题目运用三维的bfs&#xff0c;第一次做时无从下手&#xff0c;原来可以利用三维数组&#xff08;第一次用三维数组&#xff09;可以解决这类问题&#xff0c;然后套bfs模板即可。 #include<iostream> #include…

算法体系-11 第十一节:二叉树基本算法(上)

一 两链表相交 1.1 题目描述 给定两个可能有环也可能无环的单链表&#xff0c;头节点head1和head2。请实现一个函数&#xff0c;如果两个链表相交&#xff0c;请返回相交的 第一个节点。如果不相交&#xff0c;返回null 【要求】 如果两个链表长度之和为N&#xff0c;时间复杂…

瑞_Redis_短信登录_基于Session实现登录流程

文章目录 项目介绍1 短信登录1.1 项目准备1.2 基于Session实现登录流程1.2.1 功能流程介绍1.2.1.1 发送短信验证码1.2.1.2 短信验证码登录、注册1.2.1.3 校验登录状态 1.2.2 实现发送短信验证码功能1.2.2.1 页面流程1.2.2.2 代码实现1.2.2.3 测试 1.2.3 实现短信验证码登录、注…

SLAM 算法综述

LiDAR SLAM 其主要思想是通过两个算法&#xff1a;一个高频激光里程计进行低精度的运动估计&#xff0c;即使用激光雷达做里程计计算两次扫描之间的位姿变换&#xff1b;另一个是执行低频但是高精度的建图与校正里程计&#xff0c;利用多次扫描的结果构建地图&#xff0c;细化位…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 3月20日,星期三

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年3月20日 星期三 农历二月十一 春分 1、 教育部发布新增24种本科专业 涉及智能视觉工程、足球运动等。 2、 香港特区立法会全票通过《维护国家安全条例》&#xff0c;将于23日刊宪。 3、 国际乒联更新世界排名&#xff0c…

高效数据处理:亚信安慧AntDB在行动

亚信安慧AntDB数据库在运营商自主可控替换项目中的成功应用&#xff0c;具有极其重要的意义。该数据库的落地&#xff0c;不仅为这一项目注入了强大的支持力量&#xff0c;还在更大程度上提升了整体的运营效能。作为一种高效可靠的数据库解决方案&#xff0c;AntDB引入了先进的…

【项目】YOLOv5+PaddleOCR实现艺术字验证码识别

YOLOv5PaddleOCR实现艺术字类验证码识别 一、引言1.1 实现目标1.2 人手动点选验证码逻辑1.3 计算机点选逻辑 二、计算机验证方法2.1 PaddleOCR下方文字识别方法2.2 YOLOv5目标检测方法2.3 艺术字分类方法2.4 返回结果 三、代码获取 一、引言 1.1 实现目标 要识别的验证码类型…

浏览器的渲染原理

浏览器的渲染原理 来总结一下最近理解的浏览器渲染原理和流程 首先浏览器是多进程的&#xff0c;分为渲染进程、插件进程、主进程、网络进程以及GPU进程 而我们打包出来的js html css文件&#xff0c;经过浏览器的渲染进程&#xff0c;就会展示出看到的页面。下面主要来了解一…

mysql索引实现

什么是索引失效 在MySQL中&#xff0c;索引失效指的是查询语句无法有效地使用索引&#xff0c;而必须进行全表扫描。索引失效可能会导致查询性能下降&#xff0c;特别是在处理大量数据时。 索引失效的原因 1.索引列进行了运算或函数操作 如果对索引列进行了运算或使用了函数…

第十届电气工程、控制和机器人技术国际会议(ICRAS 2024)即将召开!

2024年第十届电气工程、控制和机器人技术国际会议&#xff08;ICRAS 2024&#xff09;将于2024年6月21日至23日在日本东京举行。本次会议由中国地质大学&#xff08;武汉&#xff09;和北京控制机器人与智能技术研究所主办。ICRAS 2024旨在聚集来自世界各地的教授、研究人员、学…

遇到大量的照片需要尺寸调整怎么办?跟着小编往下看 轻松帮你解决照片尺寸修改的烦恼

在日常的摄影后期处理中&#xff0c;我们可能会遇到需要将大量照片上传至社交媒体、制作相册、或者进行打印等需求。不同的平台或用途对照片的尺寸有不同的要求&#xff0c;因此我们需要对照片的尺寸进行调整以满足这些要求。此外&#xff0c;随着手机、相机等设备的普及&#…

开源问卷调查系统

Java Vue 开源问卷调查系统 附项目地址 Astar问卷调查系统 基于SpringBootVue前后端分离的问卷调查系统 平台简介 本项目旨在提供一个简单易用的问卷调查平台&#xff0c;帮助用户创建、分享问卷&#xff0c;并收集、分析调查数据。我们希望能够为各行各业的调查需求提供一种…

【python】python结合js逆向,让有道翻译成为你的翻译官,实现本地免费实时翻译

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN新星创作者等等。 🏆《博客》:Python全栈,前后端开发,人工智能,js逆向,A…

理清大数据技术与架构

大数据并不是一个系统软件&#xff0c;更不是一个单一的软件&#xff0c;它实际上是一种技术体系、一种数据处理方法&#xff0c;甚至可以说是一个服务平台。在这个技术体系中&#xff0c;涵盖了许多不同的部件&#xff0c;比如Hadoop服务平台。这一服务平台可以根据具体情况自…

管理类联考–复试–英文面试–问题–WhatWhyHow--纯英文汇总版

文章目录 Do you have any hobbies? What are you interested in? What do you usually do in your spare time? Could you tell me something about your family&#xff1f; Could you briefly introduce your family? What is your hometown like? Please tell me so…

复旦发布层次性奖励学习框架,增强大模型人类偏好对齐

在人工智能领域&#xff0c;强化学习&#xff08;Reinforcement Learning, RL&#xff09;一直是实现智能体自主学习的关键技术之一。通过与环境的交互&#xff0c;智能体能够自我优化其行为策略&#xff0c;以获得更多的奖励。然而&#xff0c;当涉及到复杂的人类偏好时&#…

顶顶通呼叫中心中间件-机器人话术编辑器意向问题详解

文章目录 前言联系我们意向页面和分类页面的区别意向权重意向权重的计算意向权重的作用 分类规则如何分类 前言 顶顶通旗下有一款机器人话术可视化编辑工具&#xff0c;可以根据用户的需求编辑话术流程。针对该话术编辑工具的意向功能进行讲解&#xff1a; 机器人话术可视化工…

案例练习:敲桌子

大家好&#xff1a; 衷心希望各位点赞。 您的问题请留在评论区&#xff0c;我会及时回答。 案例描述 从1开始数到数字100&#xff0c;如果数字的个位含有7&#xff0c;或者数字是7的倍数&#xff0c;我们打印输出“敲桌子”&#xff0c;其余数字直接打印输出。 代码 #includ…

婴儿洗衣机硬核测评:希亦、鲸立、小吉婴儿洗衣机性能大比拼!

如果你非常注重婴儿衣物的卫生问题&#xff0c;那么婴儿洗衣机则是非常理想的选择。毕竟&#xff0c;在婴儿吃奶或者接触其他材料时&#xff0c;其抵抗力是比较弱的&#xff0c;再加上普通洗衣机无法对婴儿的衣物进行有效的消毒处理&#xff0c;轻则会对婴儿的健康造成威胁&…