【经典链表OJ】环形链表

一、题目要求

  • 给你一个链表的头节点 head ,判断链表中是否有环。
  • 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。
  • 如果链表中存在环 ,则返回 true 。 否则,返回 false 。

题目:OJ-环形链表

二、解题思路

  我们可以使用快慢指针来解决此问题:

  1. 定义一个快指针fast,一个慢指针low。这两个指针都指向头节点head。
  2. 开始遍历链表节点。快指针每次走两步,慢指针每次走一步。
  3. 如果链表没有环,则快指针最终会指向链表尾部,返回false。
  4. 如果链表有环,由于快指针每次比慢指针多走一步,快慢指针之间的距离在不断缩短,则快慢指针一定会相遇,此时返回true。

三、代码实现

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

四、关于快慢指针步数差值的探讨

  上述解题思路中,快慢指针的步数差值为1,则快慢指针一定会相遇。那么如果它们的差值不为1呢?会不会有永远遇不到的可能性存在呢?

这里假设慢指针一次走一步,快指针一次走三步,它们的差值为2

下图的时刻为,slow指针刚刚进入环,fast指针已经走了x圈。

  • 如果N是偶数,那么fast和slow一定会相遇
  • 如果N是奇数,那么fast会刚好越过slow一个位置,它们之间的距离会变成C - 1

  • 这时需要讨论C - 1的奇偶性:
  • 如果C - 1为偶数,fast和slow一定会相遇,此时C为奇数
  • 如果C - 1为奇数,fast会刚好越过slow一个位置,它们之间的距离会变成C - 1,由于C -  1为奇数,会重新进入该情况,此时它们永远不会相遇,此时C为偶数

总结以上情况:当N为奇数C为偶数时,fast和slow永远不会相遇


现在确定了不会相遇时N和C的关系,只需要找出一个关于N和C的关系式来验证这个关系是否正确,就可以确定在该情况下是否有永远追不上的可能性。

  • slow走过的路程:L
  • fast走过的路程:L + x * C + (C - N) = 3 * L

化简如下:(把上述假设的关系带入),会发现此等式不成立,故假设不成立

  • 2L = (x + 1)C - N     (x为fast走过的完整的圈数)
  • 偶           偶           奇

所以在当slow指针一次走一步,fast指针一次走三步,它们的差值为2的情况下,它们一定会相遇。不存在永不相遇的可能性。

其他的步数差值也可用这种思路来求解,但讨论的情况会相对复杂。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

NSAT-8000电源检测软件测试砖式电源模块的方案及优势

砖式电源模块类型 砖式电源,顾名思义其外观尺寸像块砖,具有体积小、功率大、安装方便等特点。砖式电源模块具备高可靠性和高稳定性,能够为设备提供稳定的电力输出,在通信、工业、医疗等领域广泛应用。 根据尺寸大小,砖…

《WebGIS快速开发教程》第7版发布

老规矩先看封面: 可以看到我们在封面上加了“classic”的字样,这意味着第7版将会是经典版本,或者说具有里程碑意义的一个版本。 拿到新书我们可以看到第7版的整体风格是以“业务场景”为核心,所有讲解的知识点和案例都是围绕着业…

window下载安装clang

执行clang报错: c:/>clang test.cclang: warning: unable to find a Visual Studio installation; try running Clang from a developer command prompt [-Wmsvc-not-found] clang: error: unable to execute command: program not executable clang: error: li…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第十七章 Linux 环境变量

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

【竞技宝 】欧洲杯:赛事水货盘点

本届欧洲杯接近尾声,有些球员抓住机会趁势崛起,踢出了身价。可惜还有一些球员的表现无法让球迷和媒体满意,下面我们就来盘点下本届欧洲杯的水货球员,看看哪些人因为糟糕的表现上榜? 格瓦迪奥尔(克罗地亚) 本届欧洲杯是克罗地亚黄金一代球员的谢幕之战,原本格瓦迪奥尔作为球队…

24/07/08数据结构(2.1203)顺序表实现

size属于结构体的作用域 如果要访问一个结构体的指针用-> 如果要访问一个结构体的变量用. 点操作 #include<stdio.h> #include<stdlib.h> #include<string.h> #include"seqlist.h" //typedef struct seqList{ // SLDataType* _data; //需…

重磅来袭!MoneyPrinterPlus一键发布短视频到视频号,抖音,快手,小红书上线了

MoneyPrinterPlus开源有一段时间了&#xff0c;已经实现了批量短视频混剪&#xff0c;一键生成短视频等功能。 有些小伙伴说了&#xff0c;我批量生成的短视频能不能一键上传到视频号,抖音,快手,小红书这些视频平台呢&#xff1f;答案是必须可以。 下面上干货。 软件准备 当…

【Android】基于 LocationManager 原生实现定位打卡

目录 前言一、实现效果二、定位原理三、具体实现1. 获取权限2. 页面绘制3. 获取经纬度4. 方法调用5. 坐标转换6. 距离计算7. 完整代码 前言 最近公司有个新需求&#xff0c;想要用定位进行考勤打卡&#xff0c;在距离打卡地一定范围内才可以进行打卡。本文将借鉴 RxTool 的 Rx…

sdwan是硬件还是网络协议?

SD-WAN&#xff08;Software-Defined Wide Area Network&#xff0c;软件定义广域网&#xff09;并不是一个硬件产品或单一的网络协议&#xff0c;而是结合了软件、硬件和网络技术的一种解决方案。SD-WAN的核心在于其软件定义的特性&#xff0c;它通过软件来控制和管理广域网的…

如何压缩pdf文件大小,怎么压缩pdf文件大小

在数字化时代&#xff0c;pdf文件因其稳定的格式和跨平台兼容性&#xff0c;成为了工作与学习中不可或缺的一部分。然而&#xff0c;随着pdf文件内容的丰富&#xff0c;pdf文件的体积也随之增大&#xff0c;给传输和存储带来了不少挑战。本文将深入探讨如何高效压缩pdf文件大小…

@RequestPart 与 @RequestBody、@RequestParam 注解的异同点

前言 RequestPart 注解是我们在JavaEE 开发中&#xff0c;比较常见的一个注解。它经常会与 RequestBody 、RequestParam 注解进行比较&#xff0c;这篇博文我们以案例和源码相结合&#xff0c;分析这几个注解的异同点。 案例演示 创建实体类 User Data NoArgsConstructor A…

Python requests爬虫

Python的requests库是一个强大且易于使用的HTTP库&#xff0c;用于发送HTTP请求和处理响应。它是Python中最受欢迎的网络爬虫框架之一&#xff0c;被广泛用于从网页中提取数据、爬取网站和进行API调用。 使用requests库&#xff0c;你可以轻松地发送各种HTTP请求&#xff0c;包…

提示词工程(Prompt Engineering)是什么?

一、定义 Prompt Engineering 提示词工程&#xff08;Prompt Engineering&#xff09;是一项通过优化提示词&#xff08;Prompt&#xff09;和生成策略&#xff0c;从而获得更好的模型返回结果的工程技术。 二、System message 系统指令 System message可以被广泛应用在&am…

linux自动化内存监控与告警

文章目录 前言一、脚本实现1. shell脚本实现2. 脚本功能概览 二、设置定时执行1. 编辑cron任务表2. 设置定时任务 三、通知结果示例总结 前言 在当今数字化与网络化日益普及的时代&#xff0c;系统管理与维护成为了确保业务连续性和数据安全的关键环节。其中&#xff0c;监控系…

大模型时代:人工智能与大数据平台的深度融合

在当今的大数据时代&#xff0c;数据已经成为驱动业务增长和创新的关键因素。与此同时&#xff0c;随着人工智能技术的不断进步&#xff0c;AI在大规模数据处理和分析方面的能力日益强大。因此&#xff0c;将人工智能与大数据平台相结合&#xff0c;可以为企业带来巨大的商业价…

linux信息收集与提权

目录 版本信息收集 kali得一些exp网站 kali自带的searchsploit工具 脏牛提权漏洞&#xff08;改写没有写权限的文件&#xff09; 测试靶场下载链接 sudo提权 上传恶意C脚本进行编译生成dirty的elf文件&#xff0c;也可以在攻击机编译好上传 启动&#xff0c;123456是设…

网站地址显示不安全怎么办

当网址栏显示不安全时&#xff0c;通常是因为网站使用的是HTTP而不是HTTPS协议&#xff0c;或者因为网站的SSL证书存在问题。以下是一些解决方法&#xff1a;1、迁移到HTTPS&#xff1a;如果您是网站所有者&#xff0c;最好的解决方法是将网站迁移到HTTPS。HTTPS通过使用SSL/TL…

室内精准定位是什么?室内精准定位的方式有哪些?

说到室内精准定位很多人可能会比较陌生&#xff0c;因为这一说法并没有大范围推广&#xff0c;又或者说只是很多相关行业的人才知道这样的说法。但是定位这一问题大家都知道吧&#xff1f;尤其是要到一个地方去&#xff0c;都会进行定位导航。那么这一般都是户外定位&#xff0…

案例分享:Qt modbusTcp调试工具(读写Byte、Int、DInt、Real、DReal)(当前v1.0.0)

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://blog.csdn.net/qq21497936/article/details/140313789 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片…

哈喽GPT-4o,程序员如何通过GPT-4o提高办公效率

目录 一、编写工作汇报Prompt&#xff1a;我是一名Java开发工程师&#xff0c;请写一份工作总结&#xff0c;工作内容是一个SpringBootVue实现的图书管理系统&#xff0c;按下面的结构来撰写&#xff1a;1. 工作背景&#xff1b;2. 工作内容&#xff1b;3. 工作建议&#xff1b…