菜鸟系列之C/C++经典试题(七)
找含单链表的环入口点
问题1:怎样推断单链表中是否存在环(即下图中从结点E到结点R组成的环)?
分析:设一快一慢两个指针(Node *fast, *low)同一时候从链表起点開始遍历,当中快指针每次移动长度为2。慢指针则为1。则若无环,開始遍历之后fast不可能与low重合,且fast或fast->next终于必定到达NULL;若有环。则fast必定不迟于low先进入环,且因为fast移动步长为2,low移动步长为1,则在low进入环后继续绕环遍历一周之前fast必定能与low重合(且必定是第一次重合)。于是函数可写例如以下:
bool hasCircle(Node* head, Node* &encounter)
{Node *fast = head, *slow = head;while(fast && fast->next){fast = fast->next->next;slow = slow->next;if(fast == slow){encounter = fast;return true;}}encounter = NULL;return false;
}
问题2:若存在环,怎样找到环的入口点(即上图中的结点E)?
解答:如图中所看到的。设链起点到环入口点间的距离为x,环入口点到问题1中fast与low重合点的距离为y。又设在fast与low重合时fast已绕环n周(n>0),且此时low移动总长度为s,则fast移动总长度为2s。环的长度为r。则
s + nr = 2s,n>0 ①
s = x + y ②
由①式得 s = nr
代入②式得
nr = x + y
x = nr - y ③
现让一指针p1从链表起点处開始遍历,指针p2从encounter处開始遍历,且p1和p2移动步长均为1。则当p1移动x步即到达环的入口点,由③式可知,此时p2也已移动x步即nr - y步。
因为p2是从encounter处開始移动。故p2移动nr步是移回到了encounter处,再退y步则是到了环的入口点。也即,当p1移动x步第一次到达环的入口点时。p2也恰好到达了该入口点。于是函数可写例如以下:
Node* findEntry(Node* head, Node* encounter)
{ Node *p1 = head, *p2 = encounter;while(p1 != p2){p1 = p1->next;p2 = p2->next;}return p1;
}
原文来自:http://blog.csdn.net/wuzhekai1985/article/details/6725263
有错误欢迎提出, 分享请标明出处, 谢谢!
感觉好的话就顶一个。 感觉不错的话就踩一个。
菜鸟系列之C/C++经典试题(七)相关推荐
- 2013年计算机试题(三),2013年计算机等级考试(一级Ms Office)经典试题(三)及答案...
2013年计算机等级考试(一级Ms Office)经典试题(三)及答案,更多计算机等级考试报名.报考条件.考试时间和历年真题,请访问计算机等级考试网(http://www.etest8.com/den ...
- 必看:C语言高效学习方法(附经典试题详解)
C试题100例详解 写在前面 C语言高效学习方法 正片开始: 问题描述 课题分析 算法描述 自然语言方式描述 流程图方式描述 源代码 试验结果分析与讨论 写在前面 本专栏提供多于100道C试题解答,并 ...
- 【SQL查询系列】子查询经典案例
文章目录 前言 数据库 查询案例 1. 查询工资最低的员工信息: last_name, salary 2. 查询平均工资最低的部门信息 3. 查询平均工资最低的部门信息和该部门的平均工资 4. 查询平 ...
- 2022年乡村医生考试经典试题及答案
1.以下属于医疗机构从业人员基本行为规范的是(). A.尊重科学 B.规范行医 C.重视人文 D.规范文书 E.以上都是 2.热性惊厥持续状态治疗药物是 A.苯巴比妥 B.副醛 C.地西泮 D.水合氯 ...
- js经典试题之ES6
js经典试题之ES6 1:在ECMAScript6 中,Promise的状态 答案:pending resolved(fulfilled) rejected 解析: Promise对象只有三种状态: ...
- 数据库SQL面试题七则
[试题一] 在一个表Student中,属性有学号SNo.性别Ssex,请用SQL写一个语句,查询男女生分别有多少人? SELECT count(*) Ssex FROM Student GROUP B ...
- js经典试题之数据类型
js经典试题之数据类型 1:输出"B" + "a" + + "B" + "a"的值: 答案:BaNaNa. 分析:因为+ ...
- 微型计算机曾经使用过的字长,自考《计算机应用基础》模拟试题七
单选题(每题1分,共40分) 1.远程登录服务是____. A.DNS B.FTP C.CHAT D.TELNET 2.通讯网中发送方和接收方之间的物理通路叫作_____. A.传输网络 B.传输电缆 ...
- JAVA sku商品数据经典试题
JAVA sku商品数据经典试题 试题1 试题2 试题3 试题代码 试题所有相关代码github: 试题1 假设sku数据很多, 无法将sku列表完全加载到内存中,从/resources/data/d ...
最新文章
- 985高校挖出古墓!网友:毕业论文自己找上门来了
- sql server 的 money类型
- mysql ——MHA
- 单片机中如何将BCD码拆开_单片机二进制BCD码转换实验程序流程图
- ios跨线程通知_iOS多线程开发(三)---Run Loop(一)
- 网页版消消乐快速实现,无代码吗iVX 真那么简单?
- linux下python开发环境搭建_linux下python开发环境之二——安装Eclipse+PyDev
- ddr4服务器内存频率_金士顿DDR4-3200服务器内存通过完整测试
- 《哪吒》票房超《复联4》 位列中国电影票房总榜第三
- 用python写一个程序来验证每个数字的生成概率是否相同_Python实现简单生成验证码功能【基于random模块】...
- oracle杅擂踱阀葩,Oracle常用傻瓜问题1000问
- div显示图片_图片按照百分比显示部分,不变形
- 国内android源码下载方法
- 使用echarts画设备拓扑图
- saltstackmysql return报错
- DedeCMS快速建站
- OpenCV开发笔记(七十二):红胖子8分钟带你使用opencv+dnn+tensorFlow识别物体
- 看视频可以倍速播放的(主流播放器都可以)
- 基于java基于javaweb的管理系统设计与实现怎样选题思路分享
- java中 enum什么意思_enum在java中是什么意思