如何判断一个链表是否有环

问题陈述

​ 如何判断一个链表是否有环,如果有,则返回第一个进入环的节点,没有则返回null。

思路

​ 如果一个链表无环,那么遍历链表一定可以遇到链表的终点;如果链表有环,那么遍历链表就永远在环内转下去。具体如下:

​ 1.设置快慢指针分别为fast和slow。开始,slow和fast都指向链表的头节点head。然后slow每次移动一步,fast每次移动两部,在链表中遍历。

​ 2.如果链表无环,fast指针在移动过程一定先遇到终点,直接返回null,表示链表无环。

​ 3.如果有环,fast和slow一定在环中相遇。相遇时,fast重新回到head位置,slow不动。接下来,fast指针每次移动一步,slow依然每次移动一步,继续遍历。

​ 4.fast和slow指针一定会再次相遇,并在第一个入环的节点处相遇,证明略。

代码

public Node getLoopNode(Node head){if (head == null || head.next == null || head.next.next == null){return null;}Node n1 = head.next; //n1 -> slowNode n2 = head.next.next; // n2 -> fastwhile (n1 != n2){if (n2.next == null || n2.next.next == null){return null;}n2 = n2.next.next;n1 = n1.next;}n2 = head; // n2 -> walk again from headwhile (n1 != n2){n1 = n1.next;n2 = n2.next;}return n1;
}

如何判断一个链表是否有环相关推荐

  1. 判断一个链表是否有环

    判断一个链表是否有环 方法一 方法二 方法三 给出一个单向链表,判断链表中是否存在环.虽然是一个实际工作中基本不会碰到的场景,但是面试的时候总是会考到,因此整理下各种解法,以免需要的时候用到.温故而知 ...

  2. 如何判断一个链表是否有环?

    如何判断一个链表是否存在环? 一般思路就是设置两个指针,都指向头结点,不同的是指针的速度不同,一个走的快,定义为快指针,一个走的慢定义为慢指针.倘若存在环形结构,快指针终将与慢指针相遇. 判断有环的代 ...

  3. 【笔试/面试】—— 判断一个链表是否有环

    链表的有环无环性,也即是否尾部的 next 指向 head,是否首尾相连. 要求不能使用标志位,最多只能用两个额外指针. 思路:设置两个指针,一个每次递增一步,一个每次递增两步,如果有环的话,二者必然 ...

  4. 判断一个链表中是否有环

    如何判断一个链表中是否存在环: 设置两个指针,开始都指向链表头,然后其中一个指针每次向前走一步,另一个指针每次向前走两步,如果快的遇到NULL了,证明该链表中没有环,如果有环,快的指针每次都要比慢的多 ...

  5. 判断单链表是否存在环

    周末参加完美世界校园招聘中就有一道判断单链表是否有环的编程题. 写一个C/C++函数,来判断一个单链表是否具有环,如果存在环,则给出环的入口点. 有一个单链表,其中可能有一个环,也就是某个节点的nex ...

  6. 如何判断单链表是否存在环

    原文:http://blog.csdn.net/liuxialong/article/details/6555850 如何判断单链表是否存在环 给定一个单链表,只给出头指针h: 1.如何判断是否存在环 ...

  7. 判断单链表是否有环及环的链接点(转)

    这篇文章是转载自蒙恩的罪人的博文:判断单链表是否有环及环的链接点(转),博文网址:http://blog.sina.com.cn/s/blog_725dd1010100tqwp.html 给定一个单链 ...

  8. 判断单链表是否有环 两链表是否相交

    1.如何判断一个链表是不是这类链表?  2.如果链表为存在环,如果找到环的入口点? 解答: 一.判断链表是否存在环,办法为: 设置两个指针(fast, slow),初始值都指向头,slow每次前进一步 ...

  9. 判断单链表是否存在环以及两个链表是否相交

    有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环.如下图: 图1 有环的链表 问题:如何判断一个链表是不是这类链表?如果链表为存在环,如何 ...

最新文章

  1. 使用JPA获取Oracle中的日期字段丢失时分秒
  2. 企业微信_客户联系,获取客户及客户群列表及详情
  3. C++矩阵库 Eigen 快速入门
  4. 20个很有帮助的 Web 前端开发教程
  5. java 重载匹配_关于Java重载方法匹配优先级
  6. Ubuntu 12.04 部署 PostGIS 2.1
  7. 快速掌握用python写并行程序_自己python程序的并行修改
  8. 推荐几款绿色无广告良心软件
  9. 【Ubuntu】用g++生成动态库
  10. Arduino与Proteus仿真实例-MPX4250压力传感器驱动仿真
  11. 北极熊秀舞步神似美国明星
  12. 二, 大数据基础架构Hadoop-HDFS入门和基本操作(基本组成, Shell操作, API操作, 读写流程) hf
  13. echarts中设置地图背景图片
  14. 【特异性双端队列 | 最小调整顺序次数】
  15. 187、商城业务-检索服务-页面排序功能
  16. 机房服务器系统监控软件,机房服务器系统监控软件
  17. 管窥广电总局的TVOS,又一个Android定制版?
  18. 数据库查询之条件查询
  19. 【SQL学习笔记】《SQL进阶教程》1.2
  20. 我来自台湾:普力600 消毒锭_普力-600 消毒片PL-600 SH-XT-K礼盒小套组_易迅发现_易迅网...

热门文章

  1. 抖音如何快速吸粉?真实案例教你实操疯狂吸粉
  2. vs2017试用期满后的处理
  3. Java切割文件、合并文件
  4. linux系统华为笔记本装软件,华为电脑Linux版换windows10,华为笔记本一键安装装win10教程...
  5. 视锥体——初等几何解析
  6. 无线充电宝哪家好?耐用的无线充电宝盘点
  7. Nuxt.js(Vue SSR)创建项目到服务器(Nginx+PM2)部署详细流程
  8. 计算材料学有哪些SCI期刊推荐? - 易智编译EaseEditing
  9. 【开源】纯手工低成本打造拟辉光管时钟,也可以很酷炫
  10. 阿里人事巨变!张建锋卸任 CTO,胡晓明任蚂蚁金服 CEO