- 转载请注明作者和出处:http://blog.csdn.net/u011475210
- 代码地址:https://github.com/WordZzzz/Note/tree/master/AtOffer
- 刷题平台:https://www.nowcoder.com/
- 题 库:剑指offer
- 编 者:WordZzzz
题目描述
输入两个链表,找出它们的第一个公共结点。
解题思路
我们一定要理解题目:输入两个链表,找出它们的第一个公共结点。从链表结点的定义可以看出,这两个链表是单向链表。如果两个单向链表有公共的结点,那么这两个链表从某一个结点开始,他妈嗯的next都指向同一个结点。但是,我们都知道,每个单向链表的结点只有一个next,因此,因此,因此,敲重点了,从第一个公共结点开始,之后他们所有的结点必定重合,也就是最终肯定是Y型而不是X型。
理解了题目,接下来的一切都好说了。
方法一:
我们可以把两个链表拼接起来,一个pHead1在前,一个pHead2在前,这样,生成了两个相同长度的链表,那么我们只要一同遍历这两个表,就一定能找到公共结点。时间复杂度O(m+n),空间复杂度O(m+n)。
方法二:
我们也可以先让把长的链表的头砍掉,让两个链表长度相同,这样,同时遍历也能找到公共结点。此时,时间复杂度O(m+n),空间复杂度为O(MAX(m,n))。
C++版代码实现
简单粗暴
1 | /* |
节省空间
1 | /* |
Python版代码实现
简单粗暴
1 | # -*- coding:utf-8 -*- |
节省空间
1 | # -*- coding:utf-8 -*- |
系列教程持续发布中,欢迎订阅、关注、收藏、评论、点赞哦~~( ̄▽ ̄~)~
完的汪(∪。∪)。。。zzz