常见面试题3:链表-判断链表是否有环以及环入口节点

内容目录

  • 常见面试题3:链表-判断链表是否有环以及环入口节点
    • 一、判断链表是否有环
      • 1.解法1:使用列表
      • 2.解法2:快慢指针
    • 二、链表环入口节点
      • 解法1:使用列表
      • 解法2:快慢指针

链表可以分为单向链表、双向链表、环形链表。对于环形链表,如果我们事前不知道,遍历的时候就会出现死循环,导致程序失败。那么如何判断链表是否有环以及环入口节点也是面试中经常问到的

一、判断链表是否有环

能想到的解法大概有两种,第一种就是把每次遍历的结果放到一个链表中,每次遍历的时候判断该链表中是否有该节点如果有就是有环,否则就是没有

第二种就是采用快慢指针的方法,维护两个指针,快指针每次向前移动两个位置,慢指针移动一个,如果快指针和慢指针指向节点一样,就说明有环

1.解法1:使用列表

public boolean hasCycle(ListNode head) {if(head == null) return false;ArrayList<ListNode> list = new ArrayList<>();while(head.next != null){if(list.contains(head)){return true;}list.add(head);head = head.next;}return false;
}

2.解法2:快慢指针

public boolean hasCycle(ListNode head) {if(head == null) return false;ListNode fast = head, slow = head;while (fast.next != null && fast.next.next != null) {fast = fast.next.next;slow = slow.next;if(fast == slow) return true;} return false;
}

二、链表环入口节点

和上述的一样,也有两种方法,第一种就是列表,当判断在列表中第一次存在时,就证明这个节点为入口节点

快慢指针就相对难想到一点,我们可以想到,当快指针追上慢指针时候,证明有环,同时慢指针移动的节点数是慢节点的两倍,所以,这时将快指针移动到head节点,与慢指针保持同速,每次移动一个节点,那么下一次相遇,就是环的入口节点

第一次相遇

第二次相遇:

解法1:使用列表

public ListNode EntryNodeOfLoop(ListNode pHead) {ArrayList<ListNode> list = new ArrayList<>();while(pHead.next != null){if(list.contains(pHead)) return pHead;list.add(pHead);pHead = pHead.next;}return null;
}

解法2:快慢指针

public ListNode EntryNodeOfLoop(ListNode pHead) {if(pHead == null) return null;ListNode slow = pHead, fast = pHead;// 第一次相遇while(fast.next != null && fast.next.next != null){fast = fast.next.next;slow = slow.next;if(fast == slow) break;}if(fast.next == null || fast.next.next == null) return null;fast = pHead;// 第二次相遇while(fast != slow){fast = fast.next;slow = slow.next;}return fast;
}

常见面试题:链表3-判断链表是否有环以及环入口节点相关推荐

  1. 搞懂单链表常见面试题

    搞懂单链表常见面试题 Hello 继上次的 搞懂基本排序算法,这个一星期,我总结了,我所学习和思考的单链表基础知识和常见面试题,这些题有的来自 <剑指 offer> ,有的来自<程序 ...

  2. 在单链表写入一组数据代码_链表常见操作和15道常见面试题

    什么是单链表 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer),简单来说链表并不像数组那样 ...

  3. 【IT笔试面试题整理】判断链表是否存在环路,并找出回路起点

    [试题描述]定义一个函数,输入一个链表,判断链表是否存在环路,并找出回路起点 Circular linked list: A (corrupt) linked list in which a node ...

  4. 常见面试题:为什么HashMap不是线程安全的呢?(JDK1.7和JDK1.8角度)(看完你就能和面试官笑谈人生了)

    title: 常见面试题:为什么HashMap不是线程安全的呢?(JDK1.7和JDK1.8角度)(看完你就能和面试官笑谈人生了) tags: 面试常见题 常见面试题:为什么HashMap不是线程安全 ...

  5. Redis常见面试题总结

    Redis常见面试题 持久化方式有哪些?有什么区别? redis持久化方案分为RDB和AOF两种. RDB RDB持久化可以手动执行也可以根据配置定期执行,它的作用是将某个时间点上的数据库状态保存到R ...

  6. MySQL数据库常见面试题总结

    1.数据库的常用范式: 第一范式(1NF):指表的列不可再分,数据库中表的每一列都是不可分割的基本数据项,同一列中不能有多个值: 第二范式(2NF):在 1NF 的基础上,还包含两部分的内容:一是表必 ...

  7. BTA 常问的 Java基础40道常见面试题及详细答案,java初级面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  8. C++常见面试题,来看看你会几个~~

    C++常见面试题汇总: 写在开篇:汇总了一些公司的常见C++面试题~~收藏起来呀!! 正文开始@Assassin 目录: C++常见面试题汇总: 1. 变量的声明和定义有什么区别: 2. 简述#ifd ...

  9. Java知识点汇总以及常见面试题

    Java知识点汇总以及常见面试题 1. "=="和equals()的区别 2. 构造方法能不能重写或者重载 3. 基本数据类型 4. 匿名内部类能被继承? 5. Integer和i ...

最新文章

  1. unity加载sprite_Unity 利用UGUI打包图集,动态加载sprite资源
  2. Python__configparser模块
  3. matlab特征点数量,特征点检测效果评估(matlab代码)
  4. USACO翻译:USACO 2014 FEB SILVER 三题
  5. 黑色背景下,将照片内封闭空心图案的空心区域染成Cyan并保存
  6. 用canvas给自己的博客园加背景(二)
  7. Matlab图形修饰之色彩处理
  8. python comprehensions_Python中的Comprehensions和Generations
  9. 斯坦福李飞飞教授:人口普查不用上门,谷歌街景加深度学习就搞定
  10. 国外变电站3d可视化技术发展_盘点:测量技术五大发展趋势,含3D扫描
  11. 不是python中文件操作的相关函数是_以下选项中,不是Python中文件操作的相关函数是:...
  12. 自主实现sleep函数(代码实现)
  13. 关于打印时怎样不出现打印机选项而直接打印的解决方法
  14. 阿里云服务(三)—对象存储OSS和块存储
  15. STC89系列单片机看门狗的使用及应用程序
  16. 数据库规范化理论详解
  17. faster r-cnn训练、测试、检测(含批量检测图片)
  18. CAS TGT 校验不成功:No principal was found in the response from the CAS server.WHO: audit:unknown
  19. 【读书笔记】汇编语言程序设计
  20. 21精美ContactPages联系我们页面设计欣赏

热门文章

  1. 将页面的table表格导出为excel或者word
  2. php true to 1,PHP语言中,______函数能检测一个变量是否存在,返回true表示变量存在,false表示变量不存在;______函数可以删除一个指定的变量,没有返回值。...
  3. 重庆文化执法部门清理27个违法音乐网站
  4. 易简--防水理发器--拆解【2009年款】
  5. 关于log4j root logger 标签 以及additivity 属性
  6. 计算机辅助药物设计 中药,基于系统生物学的计算机辅助药物设计中药研发新模式...
  7. unity 不再渲染局部_Unity 最新版本迎来260项功能改进,高清渲染管线HDRP升级
  8. bug---由于协议未知,无法导航至“localhost:8080
  9. iwebshop项目测试(一)
  10. oracle不适合建立索引的场景,Oracle 分区表中本地索引和全局索引的适用场景