环形链表题

news2025/1/12 20:58:44

1.环形链表1

看题:. - 力扣(LeetCode)

思路1:哈希表

遍历所有节点,每次遍历一个节点时,判断该节点是否被访问过。

可以使用哈希表来存储所有已经访问过的节点。每次到达一个节点,如果该节点已经存在于哈希表中,则说明该链表是环形链表,否则就将该节点加入哈希表中。重复这一过程,直到我们遍历完整个链表。

思路2:快慢指针

创建两个指针,一个快指针一个慢指针,快指针一次走两步,慢指针一次走一步,如果是环形链表则两个指针会相遇,所以每走一次判断两个指针是否相等。如果不是环形链表则快指针会走到NULL。

1.1.快慢指针

看图:

代码实现:

bool hasCycle(struct ListNode *head) {
    struct ListNode *fast=head;
    struct ListNode *slow=head;
    while(fast&&fast->next)
    {
        fast=fast->next->next;
        slow=slow->next;
        if(fast==slow)
        {
            return true;
        }
    }
    return false;
}

2.环形链表2

看题:. - 力扣(LeetCode)

目录

1.环形链表1

1.1.快慢指针

2.环形链表2


思路1:快慢指针

先上结论:下面是一个环形链表,node结点位是快慢指针相遇的位置结点,phead是入环结点。

其中L的长度等于M的长度,知道这个结论后代码就信手拈来了。

下面是证明L=M:

如果是环形链表那么两个指针会相遇,找到相遇的节点node:

那么如图设置:head到入环的结点的长度为L,入环到相遇的结点node的长度为N,环的长度为C:

那么开始遍历链表,当然慢指针slow入环时快指针已经在环里走了至少一圈,假设为x圈,

当快慢指针相遇时,慢指针在环里面走的长度就是N,因为快指针的相对于慢指针的速度为1,所以每走一步快指针就与慢指针的距离-1,直到相遇。

此时

快指针走的路程:L+N+x*C

慢指针走的路程:L+N

因为快指针的速度是慢指针的两倍,所以路程也是慢指针的两倍。

所以:

L+N+x*C=2*(L+N)

整理一下:

L=x*C-N

处理:

L=(x-1)*C+C-N

式中当x取最小值时:L=C-N

而黑色部分长度就是C-N

此时让head遍历链表,node也开始往下走,当x取的值不是1时,node结点会一直在环里遍历,最终head和node一定会在入环结点相遇。

2.1代码
struct ListNode *detectCycle(struct ListNode *head) {
     struct ListNode *slow=head;
    struct ListNode *fast=head;
      struct ListNode *node=head;
    while(fast&&fast->next)
    {
        fast=fast->next->next;
        slow=slow->next;
        if(fast==fast)
        break;
    }
    if(fast==NULL||fast->next==NULL)
    return NULL;
    while(fast!=node)
    {
        
        fast=fast->next;
        node=node->next;
    }
    return fast;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt 6 开源版(免费) -- 安装图解

Qt6起,两项重大改变(并非指技术): 必须在线安装,不再提供单独的安装包主推收费的商业版 当然的,为了培养市场,Qt6还提供了一个免费的:开源版。 开源版相对于收费的商业版&#xf…

《Fundamentals of Power Electronics》——Boost电路及仿真

Boost电路的拓扑结构如下所示: 下面是在simulink中搭建的一个Boost电路的仿真实验平台,其中直流输入电压为100V,电感值为1mH(模拟电阻为1毫欧),电容值为470uF,负载为50欧姆,占空比选择为0.5,开关…

【Qt】QtCreator忽然变得很卡

1. 问题 Qt Creator忽然变得很卡。电脑里两个版本的Qt Creator,老版本的开启就卡死,新版本好一点,但是相比于之前也非常卡,最明显的是在 ctrl鼠标滚轮 放大缩小的时候,要卡好几秒才反应。 2. 解决方案 2.1 方法1 关…

239 基于matlab的EKF(扩展卡尔曼滤波)_UKF(无迹卡尔曼滤波)_PF(粒子滤波)三种算法的估计结果比较

基于matlab的EKF(扩展卡尔曼滤波)_UKF(无迹卡尔曼滤波)_PF(粒子滤波)三种算法的估计结果比较,输出估计误差,并单独对粒子滤波进行估计及其置信区间可视化。程序已调通,可直接运行。 239 EKF(扩展卡尔曼滤波) - 小红书 …

牛客网刷题 | CC1 获取字符串长度

目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 描述 键盘输入一个字符串…

redis故障中出现的缓存击穿、缓存穿透、缓存雪崩?

一、背景: 在维护redis服务过程中,经常遇见一些redis的名词,例如缓存击穿、缓存穿透、缓存雪崩等,但是不是很理解这些,如下就来解析一下缓存击穿、缓存穿透、缓存雪崩名词。 二、缓存穿透问题: 常见的缓存使…

update_min_vruntime()流程图

linux kernel scheduler cfs的update_min_vruntime() 看起来还挺绕的。含义其实也简单,总一句话,将 cfs_rq->min_vruntime 设置为: max( cfs_rq->vruntime, min(leftmost_se->vruntime, cfs_rq->curr->vruntime) )。 画个流…

Laravel5.4 反序列化

文章目录 0x01 环境搭建0x02 POP 链0x03 exp0x04 总结 前言:CC 链复现的头晕,还是从简单的 Laravel 开始吧。 laravel 版本:5.4 0x01 环境搭建 laravel安装包下载地址 安装后配置验证页面。在 /routes/web.php 文件中添加一条路由&#xf…

Java核心技术.卷I-上-笔记

目录 面向对象程序设计 使用命令行工具简单的编译源码 数据类型 StringBuilder 数组 对象与类 理解方法调用 继承 代理 异常 断言 日志 面向对象程序设计 面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分从根本上…

在Primavera P6 中维护自定义活动栏

前言 自从 Henry Gantt 在 1910 年左右提出这个想法以来,以图形方式显示项目进度表并沿时间刻度显示条形图一直延续到当今最复杂和流行的项目进度系统中。在本文中,我们将仔细研究 Primavera P6 Professional 中的甘特图,并探索一些自定义其…

一天狂涨2000亿的谷歌,看到了AI商业化的曙光

“人工智能是有史以来最深刻的平台变革之一,谷歌依旧会成为第一。” -谷歌CEO桑达尔皮查伊 在2024年一季度财报发布后,谷歌盘后涨超10%,终于站稳加入了“2 万亿美元俱乐部”。 从财报数据来看,谷歌一季度总营收805.4…

新手开通抖音小店的时候,必须要注意的6点!建议收藏!

大家好,我是电商小V 今天咱们就来详细的说一下开通抖音小店的时候需要注意的事项,避免咱们在开店的时候踩坑导致店铺后期的正常运营, 第一点:是关于营业执照的问题 营业执照咱们都知道,分为个体和企业的,咱…

正态分布的参数及意义

正态分布,也称为高斯分布,是统计学中最重要的分布之一,具有许多重要的特性。正态分布的参数包括均值(μ)和标准差(σ),有时也使用方差(σ^2)来描述。下面是这…

【快速入门】数据库的增删改查与结构讲解

文章的操作都是基于小皮php study的MySQL5.7.26进行演示 what 数据库是能长期存储在计算机内,有组织的,可共享的大量数据的集合。数据库中的数据按照一定的数据模型存储,具有较小的冗余性,较高的独立性和易扩展性,并为…

[单机]仿官武林外传飞羽完美版本_附带GM工具_虚拟机架设_视频教程

概述 今天给大家带来一款单机游戏架设教程, 仿官武林外传飞羽完美版本 演示视频 [单机]仿官武林外传飞羽完美版本_附带GM工具_虚拟机架设_ 环境准备 windows电脑一台,安装好vmvare12虚拟机 ,安装教程和激活码获取 githubs.xyz/boot?app3…

javase学习01-GUI设计中的菜单条,菜单及菜单项(简单的实现)

目录 一,效果及代码 二,相关内容 1,创建图片资源文件夹 2,菜单初识 3,图标大小设置 4,菜单高度设置 今天学习了Java的GUI(graphics user interface)图形用户界面中的窗口和菜单…

超市购物|基于SprinBoot+vue的超市购物系统(源码+数据库+文档)

目录 基于SprinBootvue的企业人事管理系统 一、前言 二、系统设计 三、系统功能设计 1商品管理 2公告管理 3公告类型管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设…

FR-TSN4206获得“时间敏感网络产业链名录计划”测试认证证书,TSN交换机助力智能工业发展

TSN技术,即时间敏感网络技术,已成为智能工业、自动驾驶等领域的核心。它通过时钟同步、数据调度等功能,确保低延迟、高可靠性的数据传输。 为推动TSN技术在我国的发展,工业互联网产业联盟联合多家单位启动了“时间敏感网络产业链名…

http1.1和http2.0的同源请求数限制

判断协议版本 :scheme: 在请求头中表示使用的是HTTP/2协议。即 出现 :开头的请求头Chrome 只支持查看 HTTP/1.x 的 Raw Headers,对这种请求,会给出 view source 选项。HTTP2.0不给出。可继续学习 https://www.cnblogs.com/kirito-c/p/10360868.html抓包…

C语言贪吃蛇项目

今天给大家带来一款简单的贪吃蛇游戏,一起随我来看看吧 游戏效果: 实现基本的功能: • 贪吃蛇地图绘制 • 蛇吃⻝物的功能:(上、下、左、右⽅向键控制蛇的动作) • 蛇撞墙死亡 • 蛇撞⾃⾝死亡 • 计算得分…