news 2026/6/22 19:42:28

LeetCode---环形链表 II

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode---环形链表 II

LeetCode---环形链表 II

首先要解决这个题,我们先要明白我们要考虑的情况

如果链表没有环,则直接返回null

ListNode fast=head; ListNode slow=head; while(fast!=null&&fast.next!=null){ fast=fast.next.next; slow=slow.next; if(fast==slow){ break; } }
if(fast==null||fast.next==null){ return null; }

如果有环,那我们也要考虑两种情况

圈大

从上面的图片中我们可以看出,当fast一次走两步,slow一次走一步的时候,我们会发现,

slow所走的路程是X+C-Y

fast所走的路程是X+C+C-Y

注意:慢指针不会走了很多圈才会被追上,实际上慢指针最多走半圈

如果实在想不懂,可以看看上面的图,一步一步带入进去

由于fast是一次性走两步,slow是一次性走一步

所以fast所走的路程是slow所走路程的两倍

slow所走的路程是X+C-Y

fast所走的路程是X+C+C-Y

所以我们可以列出等式 X+C+C-Y=2*(X+C-Y)

化简之后就可以看到

X==Y

由于X==Y

所以我们让指针1指针2同时走,那么它俩就会在入环的第一个节点相遇

圈小

所谓的圈小,就是当slow进环的时候,fast已经走了很多圈了

此时当slow和fast相遇的时候,走的路程分别是

slow:X+C-Y

fast:X+N*C+C-Y

由于fast所走的路程是slow的两倍

所以

2*(X+C-Y)=X+N*C+C-Y

化简后得到

x+c-y=nc

x=(n-1)c+y

当n==0的时候,X==Y,恰好是圈大的情况

当fast走了n-1圈后,依旧是回到相遇点,然后再加上个Y,正好是入环的第一个节点

假设圈的长度是2,当slow走了X的一半的时候,fast恰好入环

此时,slow每走一步,fast就走一圈

完整版代码:

public class Solution { 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){ break; } } //没找到环的情况 if(fast==null||fast.next==null){ return null; } //定义一个新节点,从头开始走,每次走一步,fast也每次走一步 //当cur和fast相等的时候,跳出循环,此时这个节点就是入环的第一个节点 ListNode cur=head; while(cur!=fast){ cur=cur.next; fast=fast.next; } return cur; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 14:13:55

打卡信奥刷题(2514)用C++实现信奥 P1950 长方形

P1950 长方形 题目描述 小明今天突发奇想,想从一张用过的纸中剪出一个长方形。 为了简化问题,小明做出如下规定: (1)这张纸的长宽分别为 n,mn,mn,m。小明将这张纸看成是由nmn\times mnm个格子组成,在剪的时…

作者头像 李华
网站建设 2026/6/22 16:13:51

打卡信奥刷题(2515)用C++实现信奥 P1955 [NOI2015] 程序自动分析

P1955 [NOI2015] 程序自动分析 题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足。 考虑一个约束满足问题的简化版本:假设 x1,x2,x3,⋯x_1,x_2,x_3,\cdotsx1​,x2​,x3​,⋯ 代表程序中出现的变量,给定 nnn 个…

作者头像 李华
网站建设 2026/6/23 2:47:33

打卡信奥刷题(2516)用C++实现信奥 P1956 Sum

P1956 Sum 题目描述 给出一个数列 a1,a2,⋯ ,ana_1,a_2,\cdots,a_na1​,a2​,⋯,an​ 和 k,pk,pk,p; 设 Si,j∑kijakS_{i,j}\sum\limits_{ki}^ja_kSi,j​ki∑j​ak​,则: Answermin⁡{Si,j mod p ∣ Si,j mod p≥k}\mathit{Answer}\m…

作者头像 李华
网站建设 2026/6/22 14:37:19

计算广告:智能时代的营销科学与实践(三)

目录 1.5 在线广告简史 一、史前时代:传统广告的数字化胚胎(1994年之前) 二、启蒙时代:展示广告的诞生与门户辉煌(1994-2000) 三、搜索时代:关键词与意图经济的崛起(2000-2007&am…

作者头像 李华
网站建设 2026/6/22 13:12:37

计算广告:智能时代的营销科学与实践(四)

目录 2.2 互联网广告的技术特点 一、可衡量性(Measurability):从“迷雾”到“显微镜” 1. 测量维度的革命 2. 从“衡量结果”到“优化过程” 二、可定向性(Targetability):从“广播”到“狙击” 1. 定…

作者头像 李华
网站建设 2026/6/23 8:48:55

如何将你的游戏发布到steam平台?

前言 你是否有自己的小游戏或独立游戏,想把它发布到steam平台,却不知道从哪儿开始?又或者你是个技术宅,想体验一下游戏上架steam的流程? 不用担心,看着这里就行啦! 这里我打算开个坑&#xf…

作者头像 李华