判断链表有环的证明

目录

1.问题      

2.证明

3.代码实现


1.问题      

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

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

        如果链表中存在环 ,则返回 true 。 否则,返回 false 。

         

2.证明

        使用快慢指针的方法可以很简单的达到目的,慢指针每次走一步快指针每次走两步,如果在链表中存在环,入环以后快慢指针没走一次,他们直接的距离就会减一,直至最后它们会在环里面相遇,如图: 

        思考一个问题,快指针必须走两步吗,快指针每次走三步行不行,四步呢?五步呢?N步行不行?

        假设快指针每次走三步,当慢指针入环时,它们同时向后走,每次它们之间的距离会减少2,但是如果它们之间的距离是奇数,那么他们这次就不会相遇,极限清空下,他们每次的距离都是奇数的话,那么他们是不是就永远不会相遇了,走N步的道理也是一样的。如图:

 

3.代码实现

typedef struct ListNode Node;
bool hasCycle(struct ListNode *head) 
{//金典的快慢指针法//快指针每次走两步,慢指针每次走一步,//快指针先进环,慢指针后进环//在环的里面每走一次快慢指针直接的距离缩小1//最终快指针会追上慢指针//如果最终不想交说明链表没有环Node* slow = head;Node* fast = head;while(fast && fast->next){fast = fast->next->next;slow = slow->next;if(slow == fast){//在环里面相遇return true;}}return  false;
}

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

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

相关文章

TansUNet代码理解

首先通过论文中所给的图片了解网络的整体架构: vit_seg_modeling部分 模块引入和定义相关量: # codingutf-8 # __future__ 在老版本的Python代码中兼顾新特性的一种方法 from __future__ import absolute_import from __future__ import division fr…

新基建助推数字经济,CosmosAI率先布局AI超算租赁新纪元

伦敦, 8月14日 - 在英国伦敦隆重的Raffles OWO举办的欧盟数字超算新时代战略合作签约仪式,CosmosAI、Infinite Money Fund与Internet Research Lab三方强强联手,达成了历史性的合作协议,共同迈向超算租赁新纪元。 ​ 这次跨界的合作昭示了全球…

Session基础

文章目录 什么是Sessionsession与cookie的区别和联系Session的存Session的取 什么是Session 服务器为每个用户浏览器创建一个会话对象(session对象),一个浏览器只能产生一个session当新建一个窗口访问服务器时,还是原来的那个ses…

VR家装提升用户信任度,线上体验家装空间感

近些年,VR家装逐渐被各大装修公司引入,VR全景装修的盛行,大大增加了客户“所见即所得”的沉浸式体验感,不再是传统二维平面的看房模式,而是让客户通过视觉、听觉、交互等功能更加真实的体验家装后的效果。 对于传统家装…

本地Linux 部署 Dashy 并远程访问教程

文章目录 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 转载自cpolar极点云文章:本地Linux 部署 Dashy 并远程访问 简介 Dashy 是一个开源的自托管的导航页配置服务,具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你…

JS如何向数组中添加数组

常见的办法有 1、push()方法 var arr [a, b, c,d]; arr.push(e); console.log(arr); // [a, b, c, d,e] 2、concat()方法 var arr1 [a, b, c]; var arr2 [d, e, f]; var arr3 arr1.concat(arr2); console.log(arr3); // [a, b, c, d, e, f] 3、可以使用ES6中的spread操作符…

【git】Fork或者git clone克隆了别人项目,如何保持与原项目同步更新

Fork或者git clone克隆了别人项目,如何保持与原项目同步更新 #mermaid-svg-LC920CR873UxZJC3 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-LC920CR873UxZJC3 .error-icon{fill:#552222;}#mermaid-svg-…

BUUCTF 还原大师 1

题目描述: 我们得到了一串神秘字符串:TASC?O3RJMV?WDJKX?ZM,问号部分是未知大写字母,为了确定这个神秘字符串,我们通过了其他途径获得了这个字串的32位MD5码。但是我们获得它的32位MD5码也是残缺不全,E903???4D…

【Vue3】自动引入插件-`unplugin-auto-import`

Vue3自动引入插件-unplugin-auto-import,不必再手动 import 。 自动导入 api 按需为 Vite, Webpack, Rspack, Rollup 和 esbuild 。支持TypeScript。由unplugin驱动。 插件安装:unplugin-auto-import 配置vite.config.ts(配置完后需要重启…

迪瑞克斯拉算法 — 优化

在上一篇迪瑞克斯拉算法中将功能实现了出来,完成了图集中从源点出发获取所有可达的点的最短距离的收集。 但在代码中getMinDistanceAndUnSelectNode()方法的实现并不简洁,每次获取minNode时,都需要遍历整个Map,时间复杂度太高。这…

stable diffusion安装包和超火使用文档及提示词,数字人网址

一:文生图、图生图 1:stable diffusion:对喜欢二次元、美女小姐姐、大眼萌妹的人及其友好哈哈(o^^o) 1):关于安装包和模型包: 链接:https://pan.baidu.com/s/11_kguofh76gwhTBPUipepw 提取码…

HTML详解连载(5)

HTML详解连载(5) 专栏链接 [link](http://t.csdn.cn/xF0H3)下面进行专栏介绍 开始喽行高:设置多行文本的间距属性名属性值行高的测量方法 行高-垂直居中技巧 字体族属性名属性值示例扩展 font 复合属性使用场景复合属性示例注意 文本缩进属性…

阿里云国际站对象储存OSS的常见问题?

1.什么是阿里云OSS? 阿里云对象存储服务OSS(Object Storage Service),是阿里云提供的海量、安全、低成本、高持久性的云存储服务,并可无限扩展。其数据设计持久性不低于99.9999999999%(12个9)&a…

UG NX二次开发(C#)-CAM自定义铣加工的出口环境

文章目录 1、前言2、自定义铣削加工操作3、出错原因4、解决方案4.1 MILL_USER的用户参数4.2 采用自定义铣削的方式生成自定义的dll4.2 配置加工的出口环境4.3 调用dll5、结论1、前言 作为一款大型的CAD/CAM软件, UG NX为我们提供了丰富的加工模板,通过加工模板能直接用于生成…

oracle怎样给某个普通用户授予杀自己用户会话的权限

一 问题描述 想给某个普通用户授予杀掉自己会话的权限 二 解决办法 2.1 用sys用户创建杀会话的存储过程 create or replace procedure scott_p_kill_session( v_sid number, v_serial number )asv_varchar2 varchar2(100);beginif v_sid is not null and v_serial is not n…

DTC服务(0x14 0x19 0x85)

DTC相关的服务有ReadDTCInformation (19) service,ControlDTCSetting (85) service和ReadDTCInformation (19) service ReadDTCInformation (19) service 该服务允许客户端从车辆内任意一台服务器或一组服务器中读取驻留在服务器中的诊断故障代码( DTC )信息的状态…

【一款互联网产品全生命周期】每个程序员都有必要读一读

文章目录 1. 需求讨论与团队成员和相关利益相关方讨论项目的需求和目标。确定项目的范围、功能和优先级。 2. 技术选型根据项目需求,选择合适的技术栈和工具。考虑项目的可维护性、性能要求和团队的技术背景。 3. 架构设计设计项目的系统架构,包括模块划…

Go语言入门

Go语言入门 简介 Go是一门由Google开发的开源编程语言,旨在提供高效、可靠和简洁的软件开发工具。Go具有静态类型、垃圾回收、并发性和高效编译的特点,适用于构建可扩展的网络服务和系统工具。本文将介绍Go语言的基础知识和常用功能,并通过…

Web菜鸟教程 - Radis实现高性能数据库

Redis是用C语言开发的一个高性能键值对数据库,可用于数据缓存,主要用于处理大量数据的高访问负载。 也就是说,如果你对性能要求不高,不用Radis也是可以的。不过作为最自己写的程序有高要求的程序员,自然是要学一下的&a…

PHP Mysql查询全部全部返回字符串类型

设置pdo属性 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);