转:经典面试题:链表的相交与环问题
源地址:http://blog.csdn.net/luckyxiaoqiang/article/details/7074022
版权所有,转载请注明出处,谢谢!
http://blog.csdn.net/walkinginthewind/article/details/7074022
1. 给出两个单向链表的头指针pHead1和pHead2,判断这两个链表是否相交。假设两个链表均不带环。
示意图如下:
如果两个链表相交于某一节点,那么在这个相交节点之后的所有节点都是两个链表所共有的。也就是说,如果两个链表相交,那么最后一个节点肯定是共有的。先遍历第一个链表,记住最后一个节点,然后遍历第二个链表,到最后一个节点时和第一个链表的最后一个节点做比较,如果相同,则相交,否则不相交。时间复杂度为O( len1 + len2),因为只需要一个额外指针保存最后一个节点地址,空间复杂度为O(1)。
2. 给出两个单向链表的头指针pHead1和pHead2,判断这两个链表是否相交,若相交返回第一个相交的节点。假设两个链表均不带环。
对第一个链表遍历,计算长度len1,同时保存最后一个节点的地址。
对第二个链表遍历,计算长度len2,同时检查最后一个节点是否和第一个链表的最后一个节点相同,若不相同,不相交,结束。
两个链表均从头节点开始,假设len1大于len2,那么将第一个链表先遍历len1-len2个节点,此时两个链表当前节点到第一个相交节点的距离就相等了,比较下一个节点是不是相同,如果相同就返回该节点,若不相同,两个链表都向后走一步,继续比较。
示意图如下:
3. 给出一个单向链表的头指针pHead,判断链表中是否有环。
示意图如下:
链表中有环,其实也就是自相交。我们用两个指针p1和p2从头开始遍历链表,p1每次前进一个节点,p2每次前进两个结点,若存在环,则p1和p2肯定会在环中相遇,若不存在,则p1和p2能正常到达最后一个节点(实际上是到达NULL)。
4. 给出一个单向链表的头指针pHead,判断链表中是否有环,若存在,则求出进入环中的第一个节点。
示意图如下:
红色虚线框中的节点为待求节点。
首先判断是否存在环,若不存在结束。
在环中的一个节点处断开(当然最后要记得恢复),这样就形成了两个相交的单链表,求进入环中的第一个节点也就转换成了求两个单链表相交的第一个节点。
如图所示:
小结:链表是数据结构中最基本的,也是面试中常考的,与链表相关的题目也变化多端,只要基础扎实,多积累一些处理类似问题的技巧,面试时便能应对自如。
转载于:https://www.cnblogs.com/xuhj001/p/3389142.html
转:经典面试题:链表的相交与环问题相关推荐
- 经典面试题:链表的相交与环问题
1. 给出两个单向链表的头指针pHead1和pHead2,判断这两个链表是否相交.假设两个链表均不带环. 示意图如下: 如果两个链表相交于某一节点,那么在这个相交节点之后的所有节点都是两个链表所共有 ...
- Unity面试题ABC(Yanlz+A经典面试题+C#问题+Unity问题+...+F高薪就业+...+立钻哥哥+...)
<Unity面试题> 版本 作者 参与者 完成日期 备注 Unity_JobView_V01_1.0 严立钻 2018.07.26 ##<Unity面试题>发布说明: ++++ ...
- 搬砖:算法经典面试题
算法经典面试题 https://blog.csdn.net/pcpanchen/article/details/16851151 1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将 ...
- 李洪强iOS经典面试题153- 补充
李洪强iOS经典面试题153- 补充 补充 有空就来解决几个问题,已经懒癌晚期没救了... UML 统一建模语言(UML,UnifiedModelingLanguage)是面向对象软件的标准化建模 ...
- 【Linux 经典面试题】
[Linux 经典面试题] 1. 在Linux系统中,以 文件 方式访问设备 . 2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统. 3. Linux文件系统中每个文 ...
- 【强烈推荐】《剑指Offer:名企面试官精讲典型编程题》一书中IT名企经典面试题
各位程序猿: <剑指Offer> 一书源自该书作者何海涛坚持更新与编写的博客( http://zhedahht.blog.163.com/ ),该博客收集整理了大量如微软.Google等知 ...
- java面试题_阿里大厂流出的数百道 Java 经典面试题
BAT 常问的 Java基础39道常见面试题 1.八种基本数据类型的大小,以及他们的封装类 2.引用数据类型 3.Switch能否用string做参数 4.equals与==的区别 5.自动装箱,常量 ...
- linux(1):Linux经典面试题
Linux经典面试题,看看你会几题? 1. 在Linux系统中,以 文件 方式访问设备 . 2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统. 3. Linux文件系统 ...
- 百度校招历年经典面试题汇总:Java开发岗
这个系列计划收集几百份朋友和读者的面经,作者合集方便查看,各位有面经屯着可以联系我哦 这个系列离结束差的还特别多,会更新涵盖所有一线大厂的所有岗位,也可以关注一下. 百度校园招聘历年经典面试题汇总:C ...
- BAT Java面试笔试33题:JavaList、Java Map等经典面试题!答案汇总!
JavaList面试题汇总 1.List集合:ArrayList.LinkedList.Vector等. 2.Vector是List接口下线程安全的集合. 3.List是有序的. 4.ArrayLis ...
最新文章
- 洛谷 P1663 山
- eureka的自我保护
- 文档扫描识别——OpenCV与C++实现OCR文字识别
- 趣链 BitXHub跨链平台 (2)跨链网络拓扑
- 【MM模块】Procurement for Consumption Material 消耗性物料的采购流程
- html js css如何关联_html+css +js 选项卡
- 多线程读取视频及深度学习推理
- 高盛的合伙人是如何选出来的?
- BP神经网络简单代码分析
- 综述类论文怎么写引言和结语?
- centos 20T硬盘(超过16T)分区和格式化
- vue项目动态域名设置方法
- dns提供商主机名_Android Pie 私人 DNS 使用教程
- UIPATH设置定时任务
- IDEA 设置去空格
- Java-通过年和月获取当前月有几个周一并获取周一的日期
- python3比较两个excel表头的异同列
- 【C++从青铜到王者】第一篇:C++入门
- 如何提高说服力?说服别人的技巧都有哪些?
- JAVA静态代码审查之checkstyle