【LeetCode】day15 142.环形链表II

142. 环形链表 II - 力扣(LeetCode)

题目描述

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

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

不允许修改 链表。

    示例 1:

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

    示例 2:

    输入:head = [1,2], pos = 0
    输出:返回索引为 0 的链表节点
    解释:链表中有一个环,其尾部连接到第一个节点。
    

    示例 3:

    输入:head = [1], pos = -1
    输出:返回 null
    解释:链表中没有环。

    题解

    这道题我在做的时候感觉相当之抽象啊,我看了题解之后也理解了一段时间才明白。

    这道题分为两个部分,首先我们要判断有无环,其次判断环的入口在哪 

    判断有无环

    设置两个指针,一个快指针,一个慢指针。快指针每次走两步,慢指针每次走一步。如果链表中存在环,那么快指针一定会和慢指针相遇。如果链表中不存在环,那么快指针一定会先指向空

    为什么存在环,两个指针就一定会相遇?

    举一个形象的比喻,跑800米,如果两个同学一快一慢同时跑,那么跑的快的同学一定会先领先于跑的慢的同学,然后再追赶上跑的慢的同学。

    怎么确定两个指针不会错开?

    两个同学在奔跑时不会是闪现对吧,距离的移动是连续的,所以肯定不会错开。

    快指针一次移动两步,慢指针一次移动一步,相当于慢指针静止,快指针以一步的速度追慢指针,而一个节点的距离已经算是链表中单位距离,所以两个指针一定会相遇

    判断环的入口

     

    1.slow为什么等于x+y 即为什么slow不是转了很多圈之后和fast遇上?

    如图,slow进入入口到再进入入口的期间,fast肯定已经追上过它了


    2.n为什么>=1

    很好理解啊 跑的快的同学在追上跑的慢的同学之前起码已经跑完了一圈


    3.重点在于理解x=(n-1)(y+z)+z 这个等式

    y+z是一圈的长度 如果两个指针分别从起点和相遇点同时移动,每个都一个节点的速度向前移动,两个指针一定会在圈的入口处相遇

    当n=1时,很好理解,就是慢指针要进入环内时,快指针刚好走了一圈回到环的入口。

    当n不等于1时,那就相当于快指针转了很多圈+z,最后都会在环的入口处相遇

    所以我要找到环的入口,就让两个指针分别指向链表的头和相遇点,同向移动,最终一定能在环的入口内相遇

    class Solution {
    public:
        ListNode *detectCycle(ListNode *head) {
           ListNode*fast=head,*slow=head;
           while(fast&&fast->next){ //不用判断慢指针,快指针肯定走在慢指针前面,如果是非循环链表
            fast=fast->next->next;
            slow=slow->next;
            //两个指针相遇,找到相遇点
            if(slow==fast){
                 ListNode*index1=fast,*index2=head;
                 while(index1!=index2){
                    index1=index1->next;
                    index2=index2->next;
                 }
                 return index1;
            }
           }
           return NULL;
        }
    };

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

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

    相关文章

    C基础(六)指针,指针的基础概念、变量定义、运算、大小等

    指针: 什么是指针:指针表示内存地址,平时所说的指针一般是保存地址的指针变量。定义指针变量 格式:数据类型 *指针变量名。初始化和赋值:指针指向变量的首地址。定义指针后若未赋值则为野指针;可将变量地址…

    【R语言】获取数据

    R语言自带2种数据存储格式:*.RData和*.rds。 这两者的区别是:前者既可以存储数据,也可以存储当前工作空间中的所有变量,属于非标准化存储;后者仅用于存储单个R对象,且存储时可以创建标准化档案&#xff0c…

    央行发布《贸易金融分布式账本技术要求》,参考架构包括5部分

    《银行科技研究社》(作者 木子剑):2024年12月11日,中国人民银行发布金融行业标准《贸易金融分布式账本技术要求》(JR/T 0308-2024)(以下简称“《要求》”),当日实施。据悉,该文件的起草单位包括6大行和多家股份制银行等。 《要求》规定了分布式账本技术在贸易金融领域…

    CSS盒模型详解:从零开始理解margin、border、padding

    引言 在CSS中,盒模型(Box Model)是一个非常基础且重要的概念。它定义了网页中每个元素如何占据空间以及元素间的关系。今天,我们就通过简单的例子来理解盒模型的构成。 盒模型的组成部分 CSS盒模型主要由四个部分组成(从外到内&#xff09…

    DS图(中)(19)

    文章目录 前言一、图的遍历广度优先遍历深度优先遍历 二、最小生成树Kruskal算法Prim算法两种方法对比 总结 前言 承上启下,我们来学习下图的中篇!!! 一、图的遍历 图的遍历指的是遍历图中的顶点,主要有 广度优先遍历 …

    112,【4】攻防世界 web weak_auth

    之前做过,回顾 进入靶场 输入admin 123456 不是,这也行,什么闭合方式,注释符都没用上 反而不自然了 不过输入admin 123456 纯属个人习惯 假如我没那么输,或者用户名,密码不是这两个,我该怎…

    蓝桥杯更小的数(区间DP)

    题目描述 小蓝有一个长度均为 n 且仅由数字字符 0 ∼ 9 组成的字符串,下标从 0 到 n − 1,你可以将其视作是一个具有 n 位的十进制数字 num,小蓝可以从 num 中选出一段连续的子串并将子串进行反转,最多反转一次。小蓝想要将选出的…

    109,【1】攻防世界 web 题目名称-文件包含

    进入靶场 直接显示源代码 提示我们通过get方式传递名为filename的参数,同时给出了文件名check.php filenamecheck.php 显示使用了正确的用法,错误的方法 filename./check.php 还是一样的回显 傻了,题目名称是文件包含,需要用到…

    71.StackPanel黑白棋盘 WPF例子 C#例子

    就是生成黑白棋盘&#xff0c;利用该控件能自动排列的功能。用一个横向的StackPanel嵌套纵向的StackPanel&#xff0c;然后在里面添加设定好长和高的矩形。 因为StackPanel是按照控件的大小展示的。所以如果不设置长和宽。就会显示不出矩形。 <StackPanel Orientation"…

    DeepSeek之python实现API应用

    先创建一个API KEY https://platform.deepseek.com/api_keys python脚本实现 # Please install OpenAI SDK first: `pip3 install openai`from openai import OpenAIclient = OpenAI(api_key="", base_url="https://api.deepseek.com")response = cli…

    MySQL中like模糊查询如何优化?

    大家好&#xff0c;我是锋哥。今天分享关于【MySQL中like模糊查询如何优化&#xff1f;】面试题。希望对大家有帮助&#xff1b; MySQL中like模糊查询如何优化&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在MySQL中&#xff0c;LIKE模糊查询通常会影…

    通过docker安装部署deepseek以及python实现

    前提条件 Docker 安装:确保你的系统已经安装并正确配置了 Docker。可以通过运行 docker --version 来验证 Docker 是否安装成功。 网络环境:保证设备有稳定的网络连接,以便拉取 Docker 镜像和模型文件。 步骤一:拉取 Ollama Docker 镜像 Ollama 可以帮助我们更方便地管理…

    制作PE启动盘(内含Win11 iso镜像)

    前言 本文用于记录制作PE启动盘过程&#xff0c;学习记录用&#xff0c;如有不对请指出&#xff0c;谢谢&#xff01; 参考视频&#xff1a; 1. 微PE下载&#xff1a;https://www.bilibili.com/video/BV1vT4y1n7JX/?spm_id_from333.788.top_right_bar_window_history.conte…

    128陷阱

    首先我们了解一下关于包装器类型 java是面向对象的语言&#xff0c;但基本类型并不是面向对象的&#xff0c;从而出现了包装器类型&#xff0c;并且包装器添加了更多的属性和方法。如我们在使用集合类型Collection的时候就一定要使用包装类型而非基本类型&#xff0c;它相当于将…

    javaEE-9.HTML入门

    目录 一.什么是html 二.认识html标签 1.标签的特点: 2.html文件基本结构 3.标签的层次结构 三、html工具 四、创建第一个文件 五.html常见标签 1标题标签h1-h6 2.段落标签:p 3.换行标签:br 4.图片标签:img 图片路径有1三种表示形式: 5.超链接:a 链接的几种形式: …

    开源 GPU 集群管理器 GPUStack

    GPUStack 是一个用于运行 AI 模型的开源 GPU 集群管理器。 项目地址&#xff1a;gpustack/gpustack: Manage GPU clusters for running AI modelshttps://github.com/gpustack/gpustackhttps://github.com/gpustack/gpustackhttps://github.com/gpustack/gpustack 核心特性 广…

    电子电气架构 --- 汽车电子拓扑架构的演进过程

    我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 简单&#xff0c;单纯&#xff0c;喜欢独处&#xff0c;独来独往&#xff0c;不易合同频过着接地气的生活…

    【Elasticsearch】range aggregation

    Elasticsearch 的Range Aggregation是一种强大的桶聚合&#xff08;Bucket Aggregation&#xff09;工具&#xff0c;用于将文档按照数值范围进行分组&#xff0c;从而实现对数据的分段分析。以下是关于 Range Aggregation 的详细说明&#xff1a; 1.Range Aggregation 的基本概…

    AI测试工程师成长指南:以DeepSeek模型训练为例

    目录 引言&#xff1a;AI测试工程师的使命与挑战成长日记&#xff1a;从测试小白到AI测试专家核心能力&#xff1a;AI测试工程师的必备素养知识体系&#xff1a;技术栈与技能图谱AI测试工具全景&#xff1a;以DeepSeek为核心的工具链实战训练模式&#xff1a;以DeepSeek模型迭…

    Spring Boot整合MQTT

    MQTT是基于代理的轻量级的消息发布订阅传输协议。 1、下载安装代理 进入mosquitto下载地址&#xff1a;Download | Eclipse Mosquitto&#xff0c;进行下载&#xff0c;以win版本为例 下载完成后&#xff0c;在本地文件夹找到下载的代理安装文件 使用管理员身份打开安装 安装…