单链表的环入口,环大小,解环
1.单链表是否有环
使用快慢指针,都从head出发,慢指针一次一步,快指针一次两步,如果两个指针相遇,说明链表有环,否则,快指针为null或其next为null,到达末尾节点
function hasCircle(head){var slow = head,fast = head;while(fast && fast.next){slow = slow.next;fast = fast.next.next;if(slow == fast){break;}}return fast != null && fast.next != null; }
2.单链表环的入口点
使用快慢指针,先判断是否有环,若有环,则慢指针从head出发,快指针与其同样的速度运行,直到相遇的一点,即为环入口点。
function getCircleEntry(head){var slow = head,fast = head;while(fast && fast.next){slow = slow.next;fast = fast.next.next;if(slow == fast){break;}}if(fast == null || fast.next == null){return null;}slow = head;while(slow != fast){slow = slow.next;fast = fast.next;}return fast; }
3. 单链表环的大小
指针绕环一圈,记录其走过的步数,即为环大小
function getCircleLen(head){var entry = getCircleEntry(head),len = 1if(entry){var p = entry.next;while(p != entry){len++;p = p.next;}}return len; }
4. 解开一个环
function breakCircle(head){var entry = getCircleEntry(head);if(entry){var p = entry;while(p.next != entry){p = p.next;}p.next = null;} }
转载于:https://www.cnblogs.com/mengff/p/6892079.html
单链表的环入口,环大小,解环相关推荐
- 单链表问题(反转、是否有环、删除结尾第N个节点、合并两个sortlist、找到交点)
1.时间复杂度O(N),内存O(1)的效率下实现单链表的翻转 public static TreeNode revers(TreeNode head){TreeNode temp,first,seco ...
- 单链表的头尾插法详解
单链表头尾插法详解 头插法构造单链表 代码实现 头插法过程 尾插法构造单链表 代码实现 尾插法过程 单链表头尾插法对比 #include "stdio.h" #include &q ...
- 数据结构-单链表基本操作带图完整详解
1.什么是链表 链表是一种物理存储结构上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指 针链接次序实现的. 2.为什么要使用链表 在未学习链表时,我们常用的存储数据的方式无非就是数组.使 ...
- c语言实现单链表逆序算法,C语言解字符串逆序和单向链表逆序问题的代码示例...
字符串逆序上次面试碰到一个单向链表逆序的题目,幸好对字符串逆序比较熟悉,类比做出来了.字符串逆序比较简单,直接上代码: void stringReverse(char* p1,char* p2) { ...
- 快慢指针求环入口问题:
1. 是否存在环: 在寻找环入口之前,我们需要先判断是否存在环.判断的方式有很多,经典的方法就是快慢指针.所谓快慢指针,就是用两个指针,一个每次只移动一步,一个每次移动两步,移动块的指针我们称之为快指 ...
- 链表2--JZ25复杂链表的复制JZ36两个链表的第一个公共结点JZ55链表中环的入口结点JZ56删除链表中重复的结点
JZ25复杂链表的复制 >>点击此链接 JZ36两个链表的第一个公共结点 题目描述 输入两个无环的单链表,找出它们的第一个公共结点.(注意因为传入数据是链表,所以错误测试数据的提示是用其他 ...
- 链表中环的入口结点 python_链表中环的入口结点
117 推荐 编辑于 2015-08-25 11:27:14 回复(43) 287 思路: 设置快慢指针,都从链表头出发,快指针每次走两步,慢指针一次走一步,假如有环,一定相遇于环中某点(结论1).接 ...
- C语言单链表基本操作,非常全面
单链表的基本操作分享: /********************* 单链表的常规操作 ****************************/LinkList CreateHeadListH(); ...
- 数据结构和算法设计专题之---判断单链表中是否有环,环的长度,环的入口节点...
题目: 给定一个单链表,只给出头指针head: 1.如何判断是否存在环? 2.如何知道环的长度? 3.如何找出环的连接点在哪里? 4.带环链表的长度是多少? 解法: 1.对于问题1,使用追赶的方法 ...
最新文章
- 树突网络Dendrite Net
- Swift3.0语言教程字符串转换为数字值
- mysql主从skip1677_解决字符集不同引起的主从同步异常1677报错问题
- 京东发力金融AI,欲再招50位金融AI顶级科学家 转载 2017年12月04日 00:00:00 42 12月1日,京东金融AI实验室在美国硅谷正式投入运营。亦在同一天,京东金融宣布,美国伊利诺伊大
- 草稿--深度学习cache系列
- 狄德罗效应下,小程序被“逼”向中心化
- 正则表达式三种模式:贪婪模式、懒惰模式、独占模式
- educoder 使用线程锁(lock)实现线程同步_Python并行编程(二):多线程锁机制利用Lock与RLock实现线程同步
- C++虚继承(八) --- 虚继承与继承的差异
- Tengine---nginx平台初探
- VUE指令篇_不常用指令
- c++11之std::move()
- redis linux服务,linux服务之redis
- C语言库文件ctype.h中重要的库函数
- Docker学习总结(65)—— 容器引擎 Docker 与 Podman 的详细对比分析
- 【EOS】2.1 EOS Hello World合约
- JavaScript:手写JSONP
- 关于HRESULT判断的宏(SUCCEEDED/FAILED)
- 分布式系统可用性与一致性
- 多行文字内容溢出显示点点点(...)省略号