数据结构:环形链表的实战指南

news2024/12/24 2:20:53

✨✨小新课堂开课了,欢迎欢迎~✨✨

🎈🎈养成好习惯,先赞后看哦~🎈🎈

所属专栏:http://t.csdnimg.cn/oHJAK(数据结构与算法)

小新的主页:编程版小新-CSDN博客

前言:今天我们主要从两个方面讲述环形链表,怎么判断是环形链表,以及如何如何找第一个入环的节点。

1.如何判断是否是环形链表

大家还记得如何找一个链表的中间节点吗?我们来回顾一下吧。

其中一种实现方法就是用的快慢指针,快指针每走两步,慢指针就走一步,当快指针对应的节点或者下一个节点为空时,慢指针指向该链表的中间节点。

 这个是单链表的情况,如果这个链表是带环链表的话,快,慢指针都会进环。那么就会上演一场快,慢指针的追击大赛。如果追上就说明该链表带环,不然的话就像上面的单链表一样,还没有开始追就结束了。

小新:快,慢指针在环内一定会相遇吗?有没有刚好错过的可能?

           如果slow走一步,fast走3,4……n步呢,结果又会怎样?

下面我们就来解答这个疑问。

能不能追上,还需我们进一步的证明。

说明当fast走两步,slow走一步是能相遇的,刚好能证明该链表是一个带环链表。

那接下我们看fast走3步,slow走1步的情况。

 如果fast走4步,slow走一步

讨论方法还是像上面的一样,这样讨论下去是非常麻烦的。

根据上面的证明已经得出了一个结论: 当N时奇数,C是偶数时是永远追不上的,我们只需讨论有没有这种情况存在即可。

显然N是奇数,C是偶数的情况不存在 ,永远追不上的条件不成立,如果是带环链表的话是一定能追上的。

总结:当快指针走n步,慢指针走一步时,在带环链表中一定能相遇,与环的大小等其他因素有一定关系,但主要结论仍然成立。具体来说,虽然环的大小等因素会影响相遇的时间和具体过程,但由于快指针相对慢指针的速度优势,它们最终还是会在环中相遇。只是可能需要经过更多的步数或绕环更多圈才能相遇。

环形链表只需用快慢指针去证明,在环形链表中快慢指针一定会相遇。

2.如何找到第一个入环的节点 

前面我们已经知道,快慢指针会在环形链表中相遇。

这个相遇的结论除了能证明链表是环形链表外,还能帮助找到的第一个入环的节点。

 这里以fast走2步,slow走一步为例。

3.实战练习 

示例1:判断是否为环形链表

代码实现:

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

    return false;
}

示例二:找第一个入环节点

代码实现:

struct ListNode *detectCycle(struct ListNode *head) {
    struct ListNode* fast, * slow;
fast = slow = head;
while (fast && fast->next)
{
    slow = slow->next;
    fast = fast->next->next;
    //相遇
    if (fast == slow)
    {
        struct ListNode* meet = slow;
        while (head != meet)
        {
            head = head->next;
            meet = meet->next;
        }
        return meet;
    }

}

return NULL;
}

 结束了~

下次还记得来哦

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

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

相关文章

Jackson系统开发方法

1、Jackson分析方法是面向数据流的分析方法。这一方法从目标系统的输入、输出数据结构入手,导出程序框架结构,再补充其它细节,就可得到完整的程序结构图。 2、应用场景:这一方法对输入、输出数据结构明确的中小型系统特别有效&am…

人工智能实验:人脸检测

一、实现目的: 了解人脸检测的主要方法;了解 detectMultiScale 函数的功能及用法;掌握使用 OpenCV 提供的分类器和检测器进行人脸检测的方法。 二、实验设备: 计算机一台;视觉实验软件环境及资源一套(vi…

明星中药企业系列洞察(一)丨官宣提价后股价涨幅近15%,百年老字号佛慈制药如何焕发力量?

近日,佛慈制药发布公告称,鉴于原材料以及生产成本上涨等原因,公司对主营中成药产品的出厂价进行调整,平均提价幅度为9%。提价消息释出后,资本市场给出了态度:佛慈制药股价连续两天累计上涨近15%。佛慈制药近…

【一起深度学习——NIN】

NIN神经网络 原理图:代码实现:输出结果: 原理图: 代码实现: import torch from torch import nn from d2l import torch as d2ldef nin_block(in_channels, out_channels, kernel_size, strides, padding):return nn.…

HIDL Hal 开发指南7 —— 驱动开发

前言 HIDL HAL 的整体架构如下图所示: 接下来我们就来完成一个从驱动到 App 的完整 HIDL HAL 实现示例。 本节的任务是在内核中实现一个简单的驱动,并完成一个应用层 Native 程序来测试我们的驱动是否正常工作。 1 编写一个简单的 Linux 内核驱动 1.…

8G防火墙,WAF防火墙,可抵御各种恶意请求、恶意机器人、攻击防御

8G防火墙,WAF防火墙,可抵御各种恶意请求、恶意机器人、攻击防御 经过一年多的 beta 测试,8G 防火墙已准备好在生产现场使用。因此,您可以受益于 nG 防火墙(又名 nG 黑名单)的最新发展提供的强大保护。8G 防…

stm32单片机开发六、SPI通信协议

上一节看到了,I2C使用上拉电阻,导致了整个电路从低到高电平的时候出现了延时爬升,就会导致I2C的频率不高,一般在100K,告诉400K 但是SPI的速率可以达到很高,这就是SPI的优势 SS,从机选择线&#…

day-30 三角形最小路径和

思路 典型的动态规划问题,状态方程可以理解为min[i][j]min[i][j]Math.min(min[i-1][j-1],min[i-1][j])&#xff0c;在考虑边界的特殊处理即可 解题方法 最后得到的最后一行中的最小值即为最小路径和 Code class Solution {public int minimumTotal(List<List<Integer&…

相机内存卡格式化怎么恢复?恢复数据的3个方法

相机内存卡格式化后&#xff0c;许多用户都曾面临过照片丢失的困境。这些照片可能具有极高的纪念价值&#xff0c;也可能包含着重要的信息。因此如何有效地恢复这些照片变得至关重要。本文将详细介绍三种实用的恢复方法&#xff0c;帮助您找回那些珍贵的影像。 下面分享几个实…

BGP协议应用:SW1、SW2、SW3、RT1、RT2之间运行BGP协议

8.SW1、SW2、SW3、RT1、RT2之间运行BGP协议,SW1、SW2、RT1 AS号65001、RT2 AS号65002、SW3 AS号65003。 (1)SW1、SW2、SW3、RT1、RT2之间通过Loopback1建立IPv4 BGP邻居。SW1和SW2之间财务通过Loopback2建立IPv4 BGP邻居,SW1和SW2的Loopback2互通采用静态路由。 (2)SW1…

Linux——综合实验

要求 按照上面的架构部署一个简单的web节点所有的服务器使用DNS服务器作为自己的DNS服务器 就是/etc/reslov.conf 中nameserver的值必须是途中dns服务器的地址所有的数据库都是用mysql应用 nfs共享导出在客户端(web服务器上)使用autofs在自动挂载&#xff0c;或者写入/etc/fsta…

【免费】WordPress LskyPro0.1.0版本兰空图床插件无法启用修改代码方法

注&#xff1a;启用插件报错&#xff0c;按提示打开main.php文件找到215行代码&#xff0c;错误原因是函数里多了一个,号&#xff0c;应该是忘记去掉了&#xff0c;把&#xff0c;号去掉就可以了 目录 项目介绍功能计划功能快速入门相关文章&#xff1a; 项目介绍 此项目为通过…

OpenCV 库来捕获和处理视频输入和相似度测量(73)

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇:OpenCV的周期性噪声去除滤波器(70) 下一篇 :使用 OpenCV 创建视频(74) ​ 目标 如今&#xff0c;拥有数字视频录制系统供您使用是很常见的。因此&#xff0c;您最终会遇到不再处理一批图像&#xf…

Java代码基础算法练习-删除有序数组中的重复项-2024.05.07

任务描述&#xff1a; 给一个有序数组&#xff08;共10个元素&#xff09;&#xff0c;请在不新建数组的情况下&#xff0c;删除重复出现的元素&#xff0c;使 每个元素只出现一次&#xff0c;最后请输出删除重复元素后数组的新长度和数组元素。 解决思路&#xff1a; 要删除…

专题五_位运算(2)

目录 面试题 01.01. 判定字符是否唯一 解析 题解 268. 丢失的数字 解析 题解 371. 两整数之和 解析 题解 面试题 01.01. 判定字符是否唯一 面试题 01.01. 判定字符是否唯一 - 力扣&#xff08;LeetCode&#xff09; 解析 题解 class Solution { public:bool isUnique…

搭建Docker私有镜像仓库

大家好&#xff0c;今天给大家分享一下如何搭建私有镜像仓库&#xff0c;私有镜像仓库可以更好地管理和控制镜像的访问和使用&#xff0c;确保只有授权的人员能够获取和使用特定的镜像&#xff0c;而且方便团队内部共享定制化的镜像&#xff0c;提高开发和部署效率&#xff0c;…

【每天一个linux小知识】如何使用 oh-my-zsh 让使用zsh更高效

往期文章 tailf 和 tail -f nslookup 目录 往期文章对比演示zshoh-my-zsh安装自动提示、补全、语法高亮等插件参考 对比演示 使用 oh-my-zsh 之前&#xff1a; 使用 oh-my-zsh 之后&#xff1a; zsh 要使用oh-my-zsh前提是使用zsh。所以第一步安装zsh 可以看一下你的系统…

使用应变计进行建筑物的健康监测

在建筑健康监测领域&#xff0c;应变计是一种至关重要的传感器&#xff0c;用于评估结构的安全和性能。特别是振弦式应变计&#xff0c;以其高精度和稳定性&#xff0c;成为监测建筑物健康状态的首选工具。本文将探讨振弦式应变计的工作原理、应用方法以及在建筑健康监测中的最…

IEEE(TOP),CCF推荐,5本毕业神刊,最快7天录用!指标优秀

本期盘点计算机领域超顺快刊&#xff0c;涵盖IEEE1区TOP、CCF推荐SCIE&#xff0c;期刊指标优秀&#xff0c;审稿周期短&#xff0c;质量稳定&#xff0c;有意向作者请看下文&#xff1a; IEEE旗下1区&#xff08;TOP&#xff09; 1 期刊简介 ✅出版社&#xff1a;IEEE ✅影…

fero - yolo - mamba:基于选择性状态空间的面部表情检测与分类

fero - yolo - mamba:基于选择性状态空间的面部表情检测与分类 摘要IntroductionRelated work FER-YOLO-Mamba: Facial Expression Detection and Classification Based on Selective State Space 摘要 面部表情识别&#xff08;FER&#xff09;在理解人类情绪线索方面起着关键…