剑指Offer(三十六):两个链表的第一个公共结点

2018年1月15日10:53:09 4 9,214 °C
摘要

输入两个链表,找出它们的第一个公共结点。

剑指Offer(三十六):两个链表的第一个公共结点

一、前言

本系列文章为《剑指Offer》刷题笔记。

刷题平台:牛客网

书籍下载:共享资源

二、题目

输入两个链表,找出它们的第一个公共结点。

1、思路

这道题和160.Intersection of Two Linked Lists是一样的。都是求两个链表的第一个公共结点。

公共结点的样子:

剑指Offer(三十六):两个链表的第一个公共结点

上图就是一个有公共结点的例子,在公共结点之后,两个链表指针指向的地址是相同的。

这道题有两个解法。

方法一:

我们可以把两个链表拼接起来,一个pHead1在前pHead2在后,一个pHead2在前pHead1在后。这样,生成了两个相同长度的链表,那么我们只要同时遍历这两个表,就一定能找到公共结点。时间复杂度O(m+n),空间复杂度O(m+n)。

方法二:

我们也可以先让把长的链表的头砍掉,让两个链表长度相同,这样,同时遍历也能找到公共结点。此时,时间复杂度O(m+n),空间复杂度为O(MAX(m,n))。

2、代码

C++:

这里使用方法二。

Python:

这里使用方法一:

weinxin
微信公众号
分享技术,乐享生活:微信公众号搜索「JackCui-AI」关注一个在互联网摸爬滚打的潜行者。
Jack Cui

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:4   其中:访客  3   博主  1

    • avatar yyx 来自天朝的朋友 火狐浏览器 Ubuntu Linux 北京市 电信 2

      请问python里cur1, cur2 = pHead1, pHead2是连接操作吗~

        • avatar Jack Cui Admin 来自天朝的朋友 谷歌浏览器 Mac OS X 10_14_4 北京市 百度网讯科技联通节点

          @yyx 这个是赋值,可以分开写,cur1=pHead1,cur2=pHead2

        • avatar zymize 来自天朝的朋友 搜狗浏览器 Windows 10 黑龙江省哈尔滨市 电信 1

          请问如果python用思路二写应该怎么写,您这里python用思路一比思路二简洁吗?

          • avatar 小白 来自天朝的朋友 谷歌浏览器 Windows 10 广东省广州市 联通 1

            python3.* 解法,你看看能行不?:
            方法1:
            a = [6,2,3,5]
            b = [4,3,7]
            c,d = min(a,b),max(a,b)
            print(c)
            print(d)
            for x in c:
            if x in d:
            res = c.index(x)
            break
            if res == None:
            print(‘没有公共结点’)
            else:
            print(res,c[res])