面试题:判断链表是否存在环
题目:判断链表是否存在环
思路:定义快慢指针,如果两个指针相遇则一定存在环。
1 public bool IsCircled(Node First) 2 { 3 if (First == null || First.Next == null) 4 { 5 return false; 6 } 7 else 8 { 9 Node slow = First; 10 Node fast = First; 11 while (fast != null && fast.Next != null) 12 { 13 fast = fast.Next.Next; 14 slow = slow.Next; 15 if (slow == fast) 16 { 17 break; 18 } 19 20 } 21 if (fast == null || fast.Next == null) 22 { 23 return false; 24 } 25 else return true; 26 } 27 }
拓展1
求环的长度:
思路:从快慢指针第一次相遇开始计数,再次相遇时停止计数。
1 public int GetloopLength(Node First) 2 { 3 if (First == null && First.Next == null) return 0; 4 else 5 { 6 Node slow = First; 7 Node fast = First; 8 int length = 0; 9 bool start = false; 10 bool again = false; 11 while (fast != null && fast.Next != null) 12 { 13 fast = fast.Next.Next; 14 slow = slow.Next; 15 if (fast == slow && again == true) 16 { 17 break; 18 } 19 if (fast == slow && again == false) 20 { 21 start = true; 22 again = true; 23 } 24 if (start == true) 25 { 26 length++; 27 } 28 } 29 return length; 30 } 31 }
拓展2
求环的入口:
思路:头结点到入口点的距离=链表总长-环长
1 public Node FindLoopEntrance(Node First) 2 { 3 if (First == null || First.Next == null) return null; 4 else 5 { 6 int sumLength = 0; 7 int loopLength = 0; 8 Node slow = First; 9 Node fast = First; 10 bool start = false; 11 bool again = false; 12 13 while (fast != null && fast.Next != null) 14 { 15 fast = fast.Next.Next; 16 slow = slow.Next; 17 if (fast == slow && again == true) break; 18 if (fast == slow && again == false) 19 { 20 start = true; 21 again = true; 22 } 23 if (start == true) loopLength++; 24 sumLength++; 25 } 26 int indexOfEntrance = sumLength - 2 * loopLength; 27 int i = 0; 28 Node entrance = First; 29 while (entrance.Next != null) 30 { 31 if (indexOfEntrance == i) break; 32 entrance = entrance.Next; 33 i++; 34 } 35 return entrance; 36 } 37 }
转载于:https://www.cnblogs.com/hehe625/p/7779393.html
面试题:判断链表是否存在环相关推荐
- PHP面试高频算法面试题 -- 判断链表是否有环
题目:给定一个链表,判断链表中是否有环. 关联力扣141题目 https://leetcode-cn.com/problems/linked-list-cycle/ 题解: PHP题解 functio ...
- 面试题——判断链表是否有环
题目描述 给定一链表,判断是否有环(有环是指最后一个结点的指针指向链表中的某个结点,构成一个循环),若有,则输出环的入口,若无,输出NULL. 结论1:若链表有环,从同一结点出发的两个指针,走得快的一 ...
- C程序:如何判断链表是否有环
C程序:如何判断链表是否有环 这是个常见的面试题哦,总之我面试的时候遇到过, 当时没有答上来,回去后想出来下面的方法一,该法还有个附加优点,可以判断出链表在哪个地方形成环的(即如果想拆开这个环,从哪个 ...
- 判断链表是否存在环(及其延伸)
有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环. 问题: 1.如何判断一个链表是不是这类链表? 2.如果链表为存在环,如果找到环的入口点 ...
- 【刷算法】判断链表是否有环以及返回入环节点
题目描述 判断一个单链表是否有环,有环则返回入环节点,否则返回null 1->2->3->4->5->6↑ ↓8<-7 复制代码 例如上面这个链表就有环,入环节点是 ...
- 双指针算法之快慢指针(一):力扣【判断链表是否有环】leetcode-141、142
一.简介:什么是快慢指针? 快慢指针,顾名思义,无非就是设置一个快指针,一个慢指针,初始化的时候,快指针和慢指针都指向链表的头结点,前进的时候一个在前一个在后,结合起来可以十分巧妙的解决链表中的一些问 ...
- 剑指offer之判断链表是否包含环
1 问题 判断链表是否包含环 2 思路 2个指针,一个指针走一步,一个指针走2步,如果相遇则有,反之无. 3 代码实现 #include <stdio.h> #include <st ...
- 数据结构:单链表操作之如何判断链表是否带环及相关操作
//判断链表是否有环 int HasCircle(Node* pHead) { Node* low=pHead; Node* fast=pHead; while(fast != NULL &a ...
- 快慢指针判断链表是否有环
链表中很经常会出现的一个问题,判断链表是否有环,标准答案也已经烂熟于心,设置快慢指针,快指针每次走2步,慢指针每次走1步,如果两个指针可以相遇的话,证明链表有环,反之无环. 我有时候就犯嘀咕,它俩一定 ...
最新文章
- spark读取hdfs路径下的数据_Spark读取HDFS数据分区参考
- 实现php a标签文件,HTML_如何点击a标签实现弹出input file上传文件对话框,html 复制代码代码如下: SPAN - phpStudy...
- UA OPTI570 量子力学32 参考系与绘景
- 时间序列python复杂网络实例_基于时间序列数据的复杂网络重构
- 错误提示“未能加载文件或程序集“Microsoft.Office.Interop.Owc11”,
- 太强了!这个 Jupyter notebook 离线工具可以用一辈子!
- mysql子查询sysdate_Oracle向MySQL 迁移相关事项
- mvc路由 html,asp.net-mvc – ASP.NET MVC路由从html页面开始
- oracle和mysql数据实时同步_异构数据源的CDC实时同步系统——最终选型实战
- r语言ggplot2一夜多图_ggplot2绘图:多张图合并为一张
- 基于图结构的图合成与差分隐私【LDPGen】
- 如何将外链接向内连接转换?
- 无法进入页面,且浏览器调试界面->Timing报CAUTION:request is not finished yet!
- 【ABAP系列】SAP ABAP的事件执行顺序
- 在函数内对带副作用的运算符 rand 的使用无效。_如何成体系掌握Excel函数(一)...
- Android开发 入门篇(一)
- CAN通讯程序C语言,基于单片机的CANBUS程序(C语言)
- 建立民间贷款集资合法化
- js将数字的金额转换成中文大写金额
- USB-Blaster驱动安装失败 Code 39
热门文章
- 解决eclipse报PermGen space内存溢出异常的问题
- 【测试】禅道搭建在服务器上的操作步骤
- 一次线上事故,让我对MySql的时间戳存char(10)还是int(10)有了全新的认识
- R语言 支持向量机分类预测
- FTP文件传输协议介绍和常用命令
- 程序员不满薪资拒绝offer,HR怒称:估计你一辈子就是个程序员了!
- ucosii 如何确定定时器的时间_全国中小学寒假时间确定,家长如何安排孩子们假期更合理?...
- python3 logging模块_python3中使用logging模块写日志,中文乱码,如何解决?
- Java教程:Java程序的运行过程(执行流程)分析
- JavaScript是什么?JavaScript简介