数据结构 ——— 单链表oj题:环状链表(判断链表是否带环)

news2024/11/26 4:28:27

目录

题目要求

手搓简易环状单链表 

代码实现

问题1:slow 指针和 fast 指针一定会相遇吗

问题2:slow 每次走一步,fast 每次走 n 步是否还能判断链表带环?(n > 2) 


题目要求

有一个单链表的头节点 head,判断链表中是否有环

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环,返回 true,否则返回 false


手搓简易环状单链表 

代码演示:

struct ListNode* n1 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(n1);
struct ListNode* n2 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(n2);
struct ListNode* n3 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(n3);
struct ListNode* n4 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(n4);

n1->val = 3;
n2->val = 2;
n3->val = 0;
n4->val = -4;

n1->next = n2;
n2->next = n3;
n3->next = n4;
n4->next = n2;

代码实现

代码演示:

bool hasCycle(struct ListNode* head)
{
	struct ListNode* slow = head;
	struct ListNode* fast = head;

	while (fast != NULL && fast->next != NULL)
	{
		slow = slow->next;
		fast = fast->next->next;

		if (slow == fast)
			return true;
	}

	return false;
}

代码解析:

利用快慢指针的思路解决,slow 指针一次走一步,fast 指针一次走两步,当 slow 指针的地址和 fast 指针的地址相同时,就说明链表是环状链表,否则 fast 指针就会走到 NULL

代码验证:

是环状链表时:

不是环状链表时:


问题1:slow 指针和 fast 指针一定会相遇吗

解答:

在 slow 指针一次走一步,fast 指针一次走两步的情况下,一定会相遇
fast 会先进入环中,slow会后进入,假设 slow 进入环后,fast 和 slow 的距离为 N
那么 fast 每走两步,slow 每走一步,距离 N 就会递减 1
N 的值一直递减 1 ,直到最后 N 的长度为 3……2……1……0
当 N 的长度为 0 时,就说明 slow 和 fast 指针相遇了
且 N 为正整数,那么只要是递减 1 ,就一定会递减到 0,所以 slow 和 fast 就一定会相遇


问题2:slow 每次走一步,fast 每次走 n 步是否还能判断链表带环?(n > 2)

解答:

当 slow 每次走一步,fast 每次走 3 步时,不一定会相遇
fast 会先进入环中,slow会后进入,假设 slow 进入环后,fast 和 slow 的距离为 N
那么 slow 每次走一步,fast 每次走 3 步,他们的距离就会缩小 2
也就是 N 的值一直递减 2,就会出现两种情况
情况1:当 N 为偶数时,每次递减2,直到最后 N 的长度为 4……2…… 0(会相遇)
情况2:当 N 为奇数时,每次递减2,直到最后 N 的长度为 3……1……-1(会错过)
且错过后,假设环的长度为 C ,那么 fast 和 slow 的距离就是 C - 1
那么此时 当 C-1 为偶数时,fast 和 slow 就会相遇,否则就永远都不会相遇

当 fast 每次走 4 步时也是一样的,假设 slow 进环后,距离为 N
slow 每走一步,fast 每走 4 步,就会缩小 3 步
那么只有当 N 的值是 3 的倍数时,slow 和 fast 才会相遇,其他情况就不会相遇

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

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

相关文章

适合新手的快速搭建全景VR服务器教程

近期有一些朋友在使用BZ全景可视化编辑器的过程中, 不了解如何把全景编辑器生成的静态全景VR HTML项目部署到自己的服务器上, 本篇文章将详细介绍如何使用宝塔面板来搭建一个全景VR服务器 我们将从安装宝塔面板开始,配置静态网页服务器,上传全景静态HTM…

英伟达股价分析:英伟达股价能否上涨到150美元,接下来该如何操作?

来源:猛兽财经 作者:猛兽财经​ 猛兽财经核心观点: (1)华尔街投行Oppenheimer已将英伟达的目标价上调到了150美元。 (2)产品方面的最新进展和合作伙伴关系进一步提升了英伟达的市场地位。 &…

Java生成Excel_低内存占用_更快

EasyExcel:高效Java Excel工具,解决大文件读写难题 EasyExcel是一个基于Java的、快速简洁且能有效解决大文件内存溢出问题的Excel处理工具。它使得用户可以在无需过多关注性能和内存消耗的情况下,轻松实现Excel文件的读写功能。相较于传统的…

微信小程序后台搭建—node+mysql

想必大家都有一个困扰,想要用微信小程序作为前端,但是后端不知道如何用node连接微信小程序,我最近也一直困扰许久,所以我就想用node写后端接口在连接微信小程序,记录一下学习笔记 前言 前端:微信小程序 后端:nodeexpr…

linux mqtt 服务记录

查看已连接的clientId 如果MQTT服务使用的是系统服务管理器(如systemd),你可以使用journalctl命令来查看服务的日志 journalctl -u mqtt.service 这里的mqtt.service是MQTT服务的名称,根据实际情况替换为你的服务名称&#xff…

element-plus组件之Upload(2.0)

接上篇 下面的属性就对应着回调函数,下面就一一进行介绍。 因为element-plus在封装upload组件时就自带了一个预览和删除的图标,只是没有方法实现,这里进行指明。 就是在图片墙列表中,自动就带了这两个图标和遮罩,下面…

论文笔记:Prototypical Verbalizer for Prompt-based Few-shot Tuning

论文来源:ACL 2022 论文地址:https://arxiv.org/pdf/2203.09770.pdfhttps://arxiv.org/pdf/2203.09770.pdf 论文代码:https://github.com/thunlp/OpenPrompthttps://github.com/thunlp/OpenPrompt Abstract 基于提示的预训练语言模型&#…

Windows 下 cocos2d-x-3.17.2 VS2017开发环境搭建

1.下载cocos2d-x-3.17.2 源码: Cocos2d-x - 成熟、轻量、开放的跨平台解决方案 2.下载Python2 Python 2.7.0 Release | Python.org 加入环境变量: 测试版本

用无人机视角,打开哀牢山!

哀牢山危险且神秘,使用无人机进行探索可以极大地提高安全性和效率。通过无人机的关键性能,将哀牢山的情况记录并传输出来 一、高清摄像与图像传输 高清摄像头:无人机通常搭载高分辨率的摄像头,能够捕捉到哀牢山细腻的自然景观和…

如何通过wos进行论文的他引的查找

本帖子主要介绍的是 如何通过wos进行论文的“他引量”的查找。 首先,对于一篇论文,在wos中进行查找的时候,一定要选择: 然后点进去搜索,点击 citations: 在返回的页面选择researcher profiles 一栏的 See all: 然后在…

Allan方差分析是否需要补充确定性误差

MEMS器件陀螺仪与加表存在确定性误差和随机误差,确定性误差可以通过转台标定,比较麻烦,也可以使用手动转动的方式,通过非线性优化的方式获取,github上已有开源程序包,可参见博文https://blog.csdn.net/chen…

使用DSPy优化提示词

使用DSPy优化提示词 🌐 前言 DSPy doc地址 DSPy github DSPy arxiv 在机器学习中,使用语言模型(LM)构建复杂系统常常很麻烦。传统方法需要一步步优化,每次调整都得重新整理,容易出错。而且,手动写提示词时,我们往往不知道改了以后会变好还是变坏,这让整个过程变得更…

Android Studio开发Kotlin项目中遇到的问题解决集

背景&#xff1a;Android Studio 2022.3.1 1.Unexpected tokens (use ; to separate expressions on the same line) 无法在同一行声明一个变量并实例化。 解决&#xff1a;分开 &#xff08;1&#xff09; var aaCo:Runoob<String>aaCoRunoob("aa") &…

基于springboot校园社团信息管理系统

校园社团信息管理系统 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了校园社团信息管理系统的开发全过程。通过分析校园社团信息管理系统管理的不足&#xff0c;创建了一个计算机管理校园社团信息管理系统的…

多元化外链策略如何最大化SEO效果?

只要观察过一些大网站都知道&#xff0c;单一的外链建设策略通常不足以支撑长期的排名提升。成功的网站都是有很多多元化的外链的&#xff0c;这样外链结构的复杂性和多样性就能确保&#xff0c;所以GPBGNBGMB的外链策略是目前效果最好的外链组合 根据市场数据&#xff0c;排名…

服务器停止响应是什么原因造成的?

“服务器停止响应”或“网页不可用”消息意味着通信中断。当您尝试访问 Web 应用或网站时&#xff0c;您的设备会向托管该应用或网站的远程 Web 服务器发送请求。然后&#xff0c;服务器会处理此请求并返回要显示的网页内容。但是&#xff0c;如果服务器遇到问题并且无法回复预…

java-vue304_springboot智慧旅游系统 w4aanb5e

目录 功能和技术介绍系统实现截图技术范围开发核心技术介绍&#xff1a;代码执行流程核心代码部分展示系统测试其他springboot项目推荐详细视频演示源码获取 功能和技术介绍 探索如何设计一个用户友好、响应迅速的系统界面&#xff0c;确保系统后端逻辑的高效和稳定性。研究如…

Fastgpt本地化部署 - 以MAC为例

1.认识fastgpt 2.私有化部署 MongoDB&#xff1a;用于存储除了向量外的各类数据PostgreSQL/Milvus&#xff1a;存储向量数据OneAPI: 聚合各类 AI API&#xff0c;支持多模型调用 &#xff08;任何模型问题&#xff0c;先自行通过 OneAPI 测试校验&#xff09; &#xff08;1&a…

基于vue框架的党建系统j9hzh(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;组织管理员,成员,通知公告,组织信息,组织成员,入党材料,会议信息,活动签到,消息通知,学习视频 开题报告内容 基于Vue框架的党建系统开题报告 一、研究背景 随着信息技术的飞速发展&#xff0c;党建工作作为党的建设的重要组成部分&am…

单脉冲阵列和差波束形成实现比幅测角法(MATLAB仿真)

单脉冲阵列和差波束形成实现比幅测角法&#xff08;MATLAB仿真&#xff09; 文章目录 前言一、和差波束形成二、比幅测角法原理三、MATLAB仿真四、MATLAB仿真代码(超详细)单脉冲阵列和差波束形成实现比幅测角法MATLAB仿真超详细代码 总结 前言 单脉冲雷达天线要求产生一个主瓣…