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. 解开一个环

找到环入口点的后面一个节点,即环的末尾节点,将其next设置为null,断链,解环
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

单链表的环入口,环大小,解环相关推荐

  1. 单链表问题(反转、是否有环、删除结尾第N个节点、合并两个sortlist、找到交点)

    1.时间复杂度O(N),内存O(1)的效率下实现单链表的翻转 public static TreeNode revers(TreeNode head){TreeNode temp,first,seco ...

  2. 单链表的头尾插法详解

    单链表头尾插法详解 头插法构造单链表 代码实现 头插法过程 尾插法构造单链表 代码实现 尾插法过程 单链表头尾插法对比 #include "stdio.h" #include &q ...

  3. 数据结构-单链表基本操作带图完整详解

    1.什么是链表 链表是一种物理存储结构上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指 针链接次序实现的. 2.为什么要使用链表 在未学习链表时,我们常用的存储数据的方式无非就是数组.使 ...

  4. c语言实现单链表逆序算法,C语言解字符串逆序和单向链表逆序问题的代码示例...

    字符串逆序上次面试碰到一个单向链表逆序的题目,幸好对字符串逆序比较熟悉,类比做出来了.字符串逆序比较简单,直接上代码: void stringReverse(char* p1,char* p2) { ...

  5. 快慢指针求环入口问题:

    1. 是否存在环: 在寻找环入口之前,我们需要先判断是否存在环.判断的方式有很多,经典的方法就是快慢指针.所谓快慢指针,就是用两个指针,一个每次只移动一步,一个每次移动两步,移动块的指针我们称之为快指 ...

  6. 链表2--JZ25复杂链表的复制JZ36两个链表的第一个公共结点JZ55链表中环的入口结点JZ56删除链表中重复的结点

    JZ25复杂链表的复制 >>点击此链接 JZ36两个链表的第一个公共结点 题目描述 输入两个无环的单链表,找出它们的第一个公共结点.(注意因为传入数据是链表,所以错误测试数据的提示是用其他 ...

  7. 链表中环的入口结点 python_链表中环的入口结点

    117 推荐 编辑于 2015-08-25 11:27:14 回复(43) 287 思路: 设置快慢指针,都从链表头出发,快指针每次走两步,慢指针一次走一步,假如有环,一定相遇于环中某点(结论1).接 ...

  8. C语言单链表基本操作,非常全面

    单链表的基本操作分享: /********************* 单链表的常规操作 ****************************/LinkList CreateHeadListH(); ...

  9. 数据结构和算法设计专题之---判断单链表中是否有环,环的长度,环的入口节点...

    题目: 给定一个单链表,只给出头指针head: 1.如何判断是否存在环? 2.如何知道环的长度? 3.如何找出环的连接点在哪里? 4.带环链表的长度是多少?   解法: 1.对于问题1,使用追赶的方法 ...

最新文章

  1. 树突网络Dendrite Net
  2. Swift3.0语言教程字符串转换为数字值
  3. mysql主从skip1677_解决字符集不同引起的主从同步异常1677报错问题
  4. 京东发力金融AI,欲再招50位金融AI顶级科学家 转载 2017年12月04日 00:00:00 42 12月1日,京东金融AI实验室在美国硅谷正式投入运营。亦在同一天,京东金融宣布,美国伊利诺伊大
  5. 草稿--深度学习cache系列
  6. 狄德罗效应下,小程序被“逼”向中心化
  7. 正则表达式三种模式:贪婪模式、懒惰模式、独占模式
  8. educoder 使用线程锁(lock)实现线程同步_Python并行编程(二):多线程锁机制利用Lock与RLock实现线程同步
  9. C++虚继承(八) --- 虚继承与继承的差异
  10. Tengine---nginx平台初探
  11. VUE指令篇_不常用指令
  12. c++11之std::move()
  13. redis linux服务,linux服务之redis
  14. C语言库文件ctype.h中重要的库函数
  15. Docker学习总结(65)—— 容器引擎 Docker 与 Podman 的详细对比分析
  16. 【EOS】2.1 EOS Hello World合约
  17. JavaScript:手写JSONP
  18. 关于HRESULT判断的宏(SUCCEEDED/FAILED)
  19. 分布式系统可用性与一致性
  20. 多行文字内容溢出显示点点点(...)省略号

热门文章

  1. 组建合适的自动化测试团队
  2. python石头剪刀布游戏编程_Python实现简单石头剪刀布游戏
  3. linux企业微信清理存储空间,微信系列——关闭微信企业号应用
  4. 使用nexus搭建离线仓库
  5. kdbg安装使用教程(kali)
  6. android 跳转系统相册,跳转系统相机和相册
  7. 物联网专题32:百度云物联网 ESP8266
  8. 使用WinNTSetup安装win10时提示efi part有红叉(win10安装UEFI系统安装)
  9. 从头开始学习网络-基础知识
  10. multidex解决65k方法数问题