剑指Offer52.两个链表的第一个公共节点
一、题目
剑指 Offer 52. 两个链表的第一个公共节点
题目描述
输入两个链表,找出它们的第一个公共节点。
示例1:
1 | 输入: A=[4,1,8,4,5] B=[5,0,1,8,4,5] |
示例2:
1 | 输入: A=[4,1,8] B=[5,0,1] |
二、分析
1.方法1:消除差距法
- 两个链表相交之后,后面都是一样的,需要找第一个公共节点。
- 但是他们的第一个公共节点在哪儿呢。我们通过两个链表的长度之差,定位到长链表的遍历起始地方。
- 此举消除了起始位置差,保证了两个链表同时遍历后一定能同时到达第一个公共节点。
2.方法2:浪漫相遇法
- 该方法实质上也是一种消除差距的方法。方法1消除差距是利用长链表遍历的时候先走几步(先出发),直到达到长,短链表遍历能够同步。
- 浪漫相遇法两个指针遍历同时出发,都走长短链表之和的路程。虽然前面的路程不同,但是因为有公共节点。后面一截路程一定相同,也就一定会相遇。
- 如下图第一个相遇的节点就是所求结果
三、代码
1.消除差距法
1 | ''' |
2.浪漫相遇法
1 | ''' |
3.浪漫相遇法优化
1 | ''' |
4.set集合存储节点,判断重复(补充)
python
1 | ''' |
C++
1 | /* |
四、总结
此题是双指针的典型题。链表问题要想到用双指针。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 坚韧的长线「串联」散落的珍珠!
评论