当前位置: 首页 > news >正文

【经典面试题】是否形成有环链表

1.环形链表oj

在这里插入图片描述

2. oj解法

利用快慢指针
请添加图片描述

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/typedef struct ListNode ListNode;
bool hasCycle(struct ListNode *head) {ListNode* slow = head, *fast = head;while(fast && fast -> next){fast = fast -> next -> next;slow = slow -> next;if(slow == fast){return true;}}return false;
}

3.面试加问

当然面试题不会这么容易,面试官随之抛下以下两个问题:
1.有没有可能快慢指针永远无法相遇呢?
2.如果快指针一次走3步,一次走4步,一次走n步还会不会相遇呢?

经过简单思考可以得出:当快指针一次走两步时,快慢指针每次行动的间隔值为1,那么此时当慢指针进入圆环开始被快指针追击时,必定会被追上。

那么如果快指针一次走三步呢?

有没有可能慢指针和快指针永远无法相遇呢?
这里进行简单的数学证明:

在这里插入图片描述
简单画图分析:
设链表从开始到进入环的长度为L,两指针在距换开始点的N的长度相遇,环长为C
从中可以得到哪些数学的等量关系式呢?
已知快指针的速度是慢指针的三倍,那么其走的路程也就是三倍,也就是每次追击两者之间的距离减少2

这里给出简单的思路图:
在这里插入图片描述
从图中可以看出

从图中可以看出当初始的N值为奇数时,且环长C为偶数时,两指针永远无法相遇。
那么现在就是要判断此种情况是否存在。

在这里插入图片描述
可推出此等式,从中我们可以发现,=左边为2L,永远为偶数,而右边为一个减式。
通过数学知识,我们得知当两数相减时,只有偶数-偶数或者奇数-奇数时得到偶数,所以当C为偶数时,(x+1)*C为偶数,此时N也为偶数,那么之前讨论的永远无法追上就时谬论了。
因此在进行第二轮追击时就可以追上,从而解得此题。

以及后面的快指针为4步N步都是同一解法。

如果被面试的是你,你答得出来吗?面试官先抛出一个简单代码题,随之考察面试者的数理分析能力,所以数学基础也是不可或缺的。

感谢大家的阅读,我将持续更新经典面试题。

http://www.lryc.cn/news/399469.html

相关文章:

  • Flask 用 Redis 缓存键值对-实例
  • 我的世界1.21多种服务端开服教程,原版/Forge/Fabric/Paper/Mohist...,Minecraft开服教程
  • docker安装nginx并配置https
  • 永磁同步电机控制算法--基于 SVM 的无磁链环 DTC
  • 如何避免在 Docker 容器中遇到 MAC 地址冲突和 IP 地址冲突的问题
  • arm64架构下源码编译安装kafka —— 筑梦之路
  • LabVIEW前面板占满整个屏幕(转)
  • Promise.all、any、race和allSettled的相同点与不同点与应用场景
  • Ubuntu下如何设置程序include搜索路径及链接路径
  • FLinkCDC引起的生产事故(二)
  • 【产品经理】WMS多仓调拨转移说明
  • 每日一练:奇怪的TTL字段(python实现图片操作实战)
  • 【Java开发实训】day03——方法的注意事项
  • HarmonyOS NEXT:一次开发,多端部署
  • Bilibili Android一二面凉经(2024)
  • 数据库内核研发学习之路(一)
  • LSTM:深度学习中的时间序列处理大师
  • T113-i系统启动速度优化方案
  • ArcGis将同一图层的多个面要素合并为一个面要素
  • 微软Win11 24H2七月更新补丁KB5040435发布!附下载
  • iOS 开发中不常见的专业术语
  • 【中项第三版】系统集成项目管理工程师 | 第 4 章 信息系统架构④ | 4.7
  • Time to say GoodBye
  • C语言之指针的奥秘(二)
  • 嵌入式linux系统内核启动过程分享
  • RK3568笔记三十五:LED驱动开发测试
  • pnpm 如何安装指定版本
  • LeetCode 240 搜索二维矩阵||
  • 万界星空科技MES系统:食品加工安全的实时监控与智能管理
  • 【学习笔记】4、组合逻辑电路(下)