环形链表必备的面试题和证明题(附图解)


文章目录

  • 环形链表必备的面试题和证明题(附图解)
  • 前言
  • 一、第一题
    • 1.题目
    • 2.思路
    • 3.代码
    • 4.延伸问题
      • (1)证明题一:
      • (2)证明题二:
  • 二、第二题
    • 1.题目
    • 2.思路+延伸的证明题
  • 总结

前言

本文介绍环形链表相关的两道面试题以及延伸出来的证明题(附源码+图解)


一、第一题

1.题目

141.环形链表 : 如下(示例):

给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。
为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从0开始).
注意:pos 不作为参数进行传递。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回 true  否则,返回 false



2.思路

slow和fast指向链表的开始,slow一次走一步,fast一次走两步,不带环fast就会走到空,带环fast会追上slow,如下图


3.代码

代码如下(示例):

struct ListNode
{int val;struct ListNode *next;
};
bool hasCycle(struct ListNode *head)
{struct ListNode* slow = head , *fast = head;while(fast && fast -> next){slow = slow -> next;fast = fast -> next -> next;if(slow == fast){return true;}}return false;
}

4.延伸问题

(1)证明题一:

题目 : 如下(示例):
为什么slow和fast一定会在环中相遇?会不会在环里面错过,永远遇不上?


结论 :如下(示例):
他们一定会相遇,但需要证明!


分析证明 :如下(示例):



(2)证明题二:

题目 : 如下(示例):
为什么slow走一步,fast要走两步?能否fast一次走n步(n>2)?


结论 :如下(示例):
当n>2时,不一定会相遇,需要证明!


分析证明 :如下(示例):




二、第二题

1.题目

  1. 环形链表2 : 如下(示例):
给定一个链表的头节点head,返回链表开始入环的第一个节点。如果链表无环,则返回null。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。
为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。
如果pos是-1,则在该链表中没有环。注意:pos不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改链表。


2.思路+延伸的证明题

思路 / 结论 : 如下(示例):

一个指针从相遇点开始走,一个指针从链表头部开始走,他们会在环的入口点相遇!


证明方法(1)如下图




证明方法(2)如下图


总结

以上就是今天要讲的内容,本文介绍了环形链表必备的面试题和证明题(附图解)
如果我的博客对你有所帮助记得三连支持一下,感谢大家的支持!

【Leedcode】环形链表必备的面试题和证明题(附图解)相关推荐

  1. 环形链表的快慢指针相遇问题证明

    环形链表的快慢指针相遇问题证明 证明1:慢指针一定在环形链表一圈内遇上 首先假设慢指针的每次只走1步,快指针每次走2步,当慢指针走了k次后,慢指针共走了k步,而快指针走了2k步. 假如说,快指针和慢指 ...

  2. leetcode 141.环形链表 I - 142.环形链表 II 代码及指针相遇证明问题

    ⭐️ 环形链表 I 题目描述 给你一个链表的头节点 head ,判断链表中是否有环.如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 如果链表中存在环 ,则返回 tru ...

  3. 2022年python面试题大全(50题附答案)

    前言: 哈喽,哈喽,都说即将到来的金三银四是一年中找工作的高峰期.在这里小编先祝大家都能找到自己心仪的工作! 正文: 这里呢小编整理了一份Python面试题,还有一些招聘信息,今天就分享给大家,希望能 ...

  4. Day4-除了142的环形链表,链表觉得很chilling

    代码随想录算法训练营Day4 一句真言: 在需要变动的节点前一位,进行指针操作. 24, 两两交换链表中的节点 虚拟头节点的作用: 单链表加上虚拟头节点之后,无论单链表是否为空,头指针始终指向头结点, ...

  5. 丢手帕java_java基于双向环形链表解决丢手帕问题的方法示例

    本文实例讲述了java基于双向环形链表解决丢手帕问题的方法.分享给大家供大家参考,具体如下: 问题:设编号为1.2--n的几个小孩围坐一圈,约定编号为k(1= 我们现在用一个双向环形链表来解这一问题. ...

  6. 基础数据结构【四】————环形链表与多项式

    主要演示环形列表节点的创建插入, 删除,遍历,环形链表连接 .双向链表节点的建立与插入 ,双向链表中节点的删除 以及环形链表在多项式中的应用 DEMO1:环形链表节点的创建与插入 /* [名称]:ch ...

  7. 刻意练习:LeetCode实战 -- Task09. 环形链表

    背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...

  8. LeetCode实战:环形链表 II

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Given a lin ...

  9. LeetCode实战:环形链表

    题目英文 Given a linked list, determine if it has a cycle in it. To represent a cycle in the given linke ...

最新文章

  1. android R文件丢失解决方法
  2. FFmpeg中可执行文件ffplay用法汇总
  3. 在CentOS上部署基于dnx/coreclr的ASP.NET 5应用程序
  4. Linux中的清屏命令
  5. hdu 2074 叠框
  6. 页面编码和被请求的资源编码如果不一致如何处理
  7. 解决GitHub中头像显示异常、设置不了头像、README图片无法显示等问题
  8. 2021年90后脱发调研报告
  9. Android 系统性能优化(53)---功耗优化battery-historian V2.0的数据获取
  10. linux c++ 输出到终端,如何将彩色文本输出到Linux终端?
  11. MFC中让自定义的类能响应消息
  12. Java 用Myeclipse部署项目基础坏境搭建
  13. YOLO系列目标检测后处理-非极大值抑制
  14. STM32入门笔记(02):麦克纳姆轮、TB6612电机驱动、PID电机控制和编码器学习记录
  15. 第21集丨问君何能尔?心远地自偏
  16. 朋友圈集赞神器 | 1秒集齐300个赞,从此点赞不求人
  17. 【与奥斯丁的二十种邂逅】-- 得克萨斯首府的小情调城市游 (介绍你在奥斯丁必须做的,推荐做的,和做了你就牛掰了的20件事)...
  18. java表白_java实现七夕表白神器
  19. 如何将excel表格转化为QQ在线多人同时编辑表格
  20. 乐视max2卡刷安卓9.0流畅运行

热门文章

  1. uni-app 132发送名片功能(二)
  2. 绿色邮件系统_论坛邮件群发_论坛邮件群发asp
  3. (附源码)node.js基于vue的化妆品销售管理系统的设计与实现 毕业设计151314
  4. MySQL使用SQL语句修改表名
  5. 女生学平面设计有发展前途吗?累不累?
  6. 酷睿i5 10400核显什么水平 i510400参数怎么样
  7. 重磅干货 |《2018腾讯移动游戏技术评审标准与实践案例》正式发布,开放下载
  8. Word转PDF文档时,如何嵌入字体
  9. 解决selenium在IE11中文本输入太慢的问题
  10. python绘制七彩圆圈_计算机等级考试二级Python讲座(一)