LC142. 环形链表 II

题目大意

给你一个链表,要求判断是否有环,若有环,找出环的入口结点。

142. 环形链表 II

判断是否有环

判环比较简单,用一个一次走一个结点的快指针,和一个一次走一个结点的慢指针同时遍历链表,若两指针相遇则链表有环,若两指针有一遇到NULL则无环。重点在于如何找到环的入口结点。

找环的入口结点

解法一:Hash+遍历

用一个指针遍历链表,将经过的所有结点都加入hashmap中,遇到重复的结点即为有环,且环入口结点就是该重复结点。代码略。

解法二:快慢指针

快慢指针的解法相同,但是推导或者说证明的思路会有差异。

思路一

代码随想录里的思路,也是常规证明思路,视频讲解:链表:6.环形链表||

思路二

我自己的推导思路,相对比较直观,但是过程比较繁琐。

设链表头结点到环入口结点的距离为x,环周长为c,快指针f,慢指针s,f一次走两个结点,s一次走一个结点。

此处我参考了直线匀速运动的追及问题。当快指针f到达环入口结点时,f刚好走了长度为x的路程,而s刚好在x/2处(f的速度是s的两倍),记此时刻为时刻一

当s到达环入口结点时,s相对于时刻一继续走了x/2,而f则是相对于时刻一在环上走了x的路程,注意,此处x可能大于环长,即f可能此时可能已经在环上走了n圈s才刚到达环入口,记此时刻为时刻二

在时刻二,s在环入口,f在环上走了x(要是c小于x怎么办?也即f在环上绕了很多圈的情况,其实并不影响,因为这个x始终说的都是追及距离,也就是f追上s要往前走的距离,毕竟f不可能倒退),即f此时在环上还没有走满一圈,那么此时f还要走 c-x 才能到达环的入口,也即此时f与s的距离为c-x(追及距离,即只考虑f往前走),类比匀速直线运动的追及问题,f的速度是s的两倍,可以推出在时刻二后,f追上s时,s在环上恰好走了c-x,记此时刻为时刻三,时刻三即为f与s相遇的时刻。

在时刻三,s与f相遇,此时相比时刻二,s在环上走了c-x,那么s还要继续往前走 c-(c-x),即x, 才能走满一圈重新到达环的入口,也就是说,到此可以推导出:f与s第一次相遇的点y,到环入口结点的距离(追及距离,只考虑指针往前走的距离)为x。

那么,接下来只要我们用一个指针指向相遇点y,一个指针指向链表头结点,将两个指针同时往前移动,当两指针相遇时,即找到环的入口结点。

证明过程中分的时刻一二三只是为了稍微严谨一些,实际上如果读者跟着文字用纸画出来理解的话这个思路很简单易懂,这个思路有一个很重要的参考是直线匀速运动的追及问题:当a的速度为b的两倍时,若a在b后方c米处,二人同时起跑,则最终b会在距离a起点处2c的距离被a追上,也即b会在跑了c米时被追上。

代码

    ListNode *detectCycle(ListNode *head) {if(head == NULL || head->next == NULL)return NULL;ListNode*f = head, *s = head;ListNode* met = NULL;  //指向相遇结点while(f && f->next){f = f->next->next;s = s->next;if(s == f){met = s;break;}}//无环if(met == NULL)return NULL;//找环入口s = head;while(s != met){s = s->next;met = met->next;}return s;}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第一颗国产 单/双端口 MIPI CSI/DSI 至 HDMI 1.4 发射器 芯片LT9611

1. 描述 LT9611 MIPI DSI/CSI 至 HDMI1.4 桥接器具有双端口 MIPI D-PHY 接收器前端配置,每个端口有 4 个数据通道,每个数据通道以 2Gbps 的速度工作,最大输入带宽为 16Gbps。 该桥接器提供一个 HDMI 数据输出,具有可选的 …

8位和32位单片机如何选择适合,以及主要区别!

单片机直接影响到项目的成功和性能,我们将分享如何选择适合您的应用的8位或32位单片机。 8位单片机 vs. 32位单片机: 一、性能和处理能力: 8位单片机: 8位单片机通常适用于相对简单的应用,如传感器控制、LED显示、小…

【论文笔记】Perception, Planning, Control, and Coordination for Autonomous Vehicles

单纯作为阅读笔记,文章内容可能有些混乱。 文章目录 1. Introduction2. Perception3. Planning3.1. Autonomous Vehicle Planning Systems3.2. Mission Planning3.3. Behavioral Planning3.4. Motion Planning3.4.1. Combinatorial Planning3.4.2. Sampling-Based P…

JavaWeb基础学习(5)

JavaWeb基础学习 一、Filter1.1 Filter介绍1.2 Filter快速入门1.3、Filter执行流程1.4、Filter使用细节1.5、Filter-案例-登陆验证 二、Listener2.1 Listener介绍2.2、ServletContextListener使用 三、AJAX3.1 AJAX介绍与概念3.2 AJAX快速入门3.3 Axios异步架构3.4 JSON-概述和…

[管理与领导-96]:IT基层管理者 - 扩展技能 - 5 - 职场丛林法则 -10- 七分做,三分讲,完整汇报工作的艺术

目录 前言: 一、汇报工作的重要性 1.1 汇报的重要性:汇报工作是工作重要的一环 1.2 向上司汇报工作状态具有重要的意义 1.2 汇报工作存在一些误解 1.3 汇报工作中的下错误做法 1.4 汇报工作与做实际工作的关系 二、工作汇报的内容与艺术 2.1 工…

Hugging Face使用Stable diffusion Diffusers Transformers Accelerate Pipelines

Diffusers A library that offers an implementation of various diffusion models, including text-to-image models. 提供不同扩散模型的实现的库,代码上最简洁,国内的问题是 huggingface 需要翻墙。 Transformers A Hugging Face library that pr…

Ubuntu安装深度学习环境相关(yolov8-python部署)

Ubuntu安装深度学习环境相关(yolov8-python部署) 本文将从如下几个方面总结相关的工作过程: Ubuntu系统安装(联想小新pro16) 2.显卡驱动安装3.测试深度学习模型 1. Ubunut 系统安装 之前在台式机上安装过Ubuntu,以为再在笔记本上安装会是小菜一碟&…

C: . 与 -> 的区别

相同点&#xff1a; 功能相同&#xff1a;访问结构体或者类的成员。优先级相同。 不同点&#xff1a; 结构体变量用 . 来访问成员&#xff1b;结构体指针用 ->来访问成员&#xff1b; #include <stdio.h> #include<string.h> //首先定义结构体类型student&a…

查询IP地址可得到哪些信息

通过IP地址定位&#xff0c;可以获取一些基本的信息&#xff0c;包括以下内容&#xff1a; 1. 地理位置&#xff1a;你可以确定IP地址所在的地理位置&#xff0c;包括国家、州或省、城市和地理坐标。这通常是通过将IP地址与地理位置数据库进行匹配来实现的。 2. ISP&#xff…

MFC中的类继承图的基本框架

一、类继承关系 从图中可知&#xff0c;在MFC中大多数的类都派生于CObject类&#xff0c;它的主要作用是为子类提供一些基本的功能&#xff0c;这些派生类构成了MFC应用程序的基本框架&#xff0c;它们各自的功能描述如表1所示。 派生类 功能描述 CCmdTarget 用于处理用户请…

解决:Loading class `com.mysql.jdbc.Driver‘. This is deprecated.

1.在连接MySQL数据库时候会出现这个报错 Loading class com.mysql.jdbc.Driver. This is deprecated. The new driver class is com.mysql.cj.jdbc.Driver. The driver is automatically registered via the SPI and manual loading of the driver class is generally unneces…

基于频谱信息的图像去噪与恢复——使用约束最小二乘方滤波法

大家好&#xff0c;我是带我去滑雪&#xff01; 随着科学技术的不断发展&#xff0c;信息的交流和获取已不再受到时空的限制&#xff0c;已经成为人们日常生活中不可或缺的一部分。图像作为人类信息交流中的重要载体&#xff0c;起着不可替代的作用。频谱图像去噪复原方法是一种…

四:内核空间内存分配

目录 内核空间内存分配 伙伴系统 slab分配器 slab分配内存 主要结构体 vmalloc 内核空间内存分配 首先从内核空间开始&#xff0c;讲解内存管理模式。 主要分为三种方式&#xff1a; 伙伴系统 解决了外部碎片问题&#xff0c;针对大块内存分配设计 Linux中的内存管理…

水一下文章

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…

selenium元素定位---ElementClickInterceptedException(元素点击交互异常)解决方法

1、异常原因 在编写ui自动化时&#xff0c;执行报错元素无法点击&#xff1a;ElementClickInterceptedException 具体报错&#xff1a;selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <span class"el-c…

Linux系统:OpenSSH7.4p升级到9.0p(服务器漏洞)

清华大学开源软件镜像站下载地址&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/pub/OpenBSD/OpenSSH/portable/openssh-9.0p1.tar.gz 一、升级 0、安装Telnet &#xff08;1&#xff09;为防止安装失败&#xff0c;无法用ssh做远程连接&#xff0c;因此先安装telnet yum…

#循循渐进学51单片机#定时器与数码管#not.4

1、熟练掌握单片机定时器的原理和应用方法。 1&#xff09;时钟周期&#xff1a;单片机时序中的最小单位&#xff0c;具体计算的方法就是时钟源分之一。 2&#xff09;机器周期&#xff1a;我们的单片机完成一个操作的最短时间。 3)定时器&#xff1a;打开定时器“储存寄存器…

机器学习 day34(机器学习项目的完整周期、精确度和召回率、F1)

机器学习项目的完整周期 第一步&#xff0c;决定项目是什么。第二步&#xff0c;收集数据。第三步&#xff0c;训练模型&#xff0c;进行错误分析并改进模型&#xff0c;可能会回到第二步。第四步&#xff0c;当模型足够好后&#xff0c;部署在生产环境中&#xff0c;继续监控…

Arcgis提取点数据经纬度

Arcgis提取点数据经纬度 现已打开tiff影像和采样点的shape文件。目标是提取采样点的经纬度信息然后导出。 打开数据管理工具-要素-添加XY坐标 在点的图层上右击打开属性表时&#xff0c;经纬度信息已经添加到属性表中。 在属性表的左上角中点击导出&#xff0c;导出为文本文…

C# 模拟button按钮批量锁住与打开

项目需求&#xff1a; 当winform界面上存在多个按钮时&#xff08;大于2个&#xff09;&#xff0c;用户需求为当点击其中一个按钮后&#xff0c;其它按钮全部为禁用&#xff0c;当被点击的按钮后台逻辑执行完成后&#xff0c;再释放所有按钮。用户可再次点击其它按钮。 此案…