例题

描述
输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)

数据范围: n \le 1000n≤1000
要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)

例如,输入{1,2,3},{4,5},{6,7}时,两个无环的单向链表的结构如下图所示:

可以看到它们的第一个公共结点的结点值为6,所以返回结点值为6的结点。
输入描述:
输入分为是3段,第一段是第一个链表的非公共部分,第二段是第二个链表的非公共部分,第三段是第一个链表和二个链表的公共部分。 后台会将这3个参数组装为两个链表,并将这两个链表对应的头节点传入到函数FindFirstCommonNode里面,用户得到的输入只有pHead1和pHead2。
返回值描述:
返回传入的pHead1和pHead2的第一个公共结点,后台会打印以该节点为头节点的链表。
示例1
输入:
{1,2,3},{4,5},{6,7}
复制
返回值:
{6,7}
复制
说明:
第一个参数{1,2,3}代表是第一个链表非公共部分,第二个参数{4,5}代表是第二个链表非公共部分,最后的{6,7}表示的是2个链表的公共部分
这3个参数最后在后台会组装成为2个两个无环的单链表,且是有公共节点的
示例2
输入:
{1},{2,3},{}
复制
返回值:
{}
复制
说明:
2个链表没有公共节点 ,返回null,后台打印{}

解决方案

def FindFirstCommonNode(self , pHead1 , pHead2 ):# write code herep1,p2=pHead1,pHead2while p1!=p2:
#             print('p101',p1.val)
#             print('p201',p2.val)
#             p1 = p1.next if p1 else pHead2
#             print('p102',p1)
#             p2 = p2.next if p2 else pHead1
#             print('p202',p2)if p1:print('p101',p1)p1 = p1.nextelse:print('p102',p1)p1 = pHead2if p2:print('p201',p2)p2 = p2.nextelse:print('p202',p2)p2 = pHead1return p2

总结

遇到两个链表比较相等得值,链表一般是由指针域跟值域组成,一般都是比较值域得值,但是值域每次判断比较麻烦,可以把他们统一遍历一遍,这个时候他们得指针域跟值域都知道了,然后求相同得部分只需要各自遍历对方即可,这样原本A里面得链表在B里面遍历得时候,遇到A里面存在得地址,他们会产生化学反应相等,同理B里面得链表在A里面遍历得时候,遇到B里面存在得地址,也会产生化学反应

python数据结构剑指offer-两个链表的第一个公共结点相关推荐

  1. [剑指offer] 两个链表的第一个公共结点

    本文首发于我的个人博客:尾尾部落 题目描述 输入两个链表,找出它们的第一个公共结点. 解题思路 如果两个链表存在公共结点,那么它们从公共结点开始一直到链表的结尾都是一样的,因此我们只需要从链表的结尾开 ...

  2. 剑指offer_两个链表的第一个公共结点

    题目描述 输入两个链表,找出它们的第一个公共结点. 解题思路: 遇到这种题目,瞬间想到HashMap- 用一个HashMap依次记录第一个链表的结点: 遍历第二个链表结点,一旦在HashMap中找到, ...

  3. 剑指offer——面试题37:两个链表的第一个公共结点

    剑指offer--面试题37:两个链表的第一个公共结点 20180906整理 Solution1: 时间复杂度为O(n2)O(n2)O(n^2)的垃圾算法 /* struct ListNode {in ...

  4. 《剑指Offer》Java刷题 NO.36 两个链表的第一个公共结点(链表,等长拼接法,长者先行法,辅助栈)

    <剑指Offer>Java刷题 NO.36 两个链表的第一个公共结点(链表,等长拼接法,长者先行法,辅助栈) 传送门:<剑指Offer刷题总目录> 时间:2020-06-19 ...

  5. 《剑指offer》-- 两个链表的第一个公共结点、链表中环的入口结点、删除链表中的重复结点

    一.两个链表的第一个公共结点: 1.题目: 输入两个链表,找出它们的第一个公共结点. 2.解题思路: (1)第一种:找出两个链表的长度,然后让长的链表先走两个链表的长度差,接着两个链表一起走. (2) ...

  6. [剑指offer]面试题37:两个链表的第一个公共结点

    面试题37:两个链表的第一个公共结点 题目:输入两个链表,找出它们的第一个公共结点.链表结点定义如下: struct ListNode {int val;ListNode *next;ListNode ...

  7. c++ 链表_剑指offer系列——52. 两个链表的第一个公共结点

    题目链接门 两个链表的第一个公共结点_牛客网​www.nowcoder.com 题目描述 输入两个链表,找出它们的第一个公共结点.(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保 ...

  8. 36 剑指offer--链表--两个链表的第一个公共结点

                               两个链表的第一个公共结点 题目 输入两个链表,找出它们的第一个公共结点. 思路 这道题和160.Intersection of Two Linke ...

  9. 求两个链表的第一个公共结点各种情况及三种思路分析

    转自:http://blog.csdn.net/ssopp24/article/details/72377184 1.寻找两个链表的第一个公共结//这道题可以有很多种思路, 我们按照, 有坏到好的顺序 ...

  10. 链表2--JZ25复杂链表的复制JZ36两个链表的第一个公共结点JZ55链表中环的入口结点JZ56删除链表中重复的结点

    JZ25复杂链表的复制 >>点击此链接 JZ36两个链表的第一个公共结点 题目描述 输入两个无环的单链表,找出它们的第一个公共结点.(注意因为传入数据是链表,所以错误测试数据的提示是用其他 ...

最新文章

  1. thinkphp集成系列之phpmailer批量发送邮件
  2. 《精通Spring4.X企业应用开发实战》读后感第五章(注入参数详解)
  3. JavaSE(二十一)——栈和队列、栈和堆
  4. 牛客网递归错题:递归、欧几里得求最大公约数的时间复杂度、线性递归与尾递归实例区别
  5. Linux下出现permission denied的解决办法
  6. 统计Apache或Nginx访问日志里的独立IP访问数量的Shell
  7. STM32学习:串口通讯(proteus仿真)
  8. 万无一失,网站的高可用架构
  9. 贝叶斯网络结构学习之MCMC算法(基于FullBNT-1.0.4的MATLAB实现)
  10. Ubuntu 的护眼软件 :RedShift
  11. 在硅谷初创公司怎么找投资人
  12. 怎样对生产环境10T RAC新增Adg 不对现有主库产生任何负载,不占用网络带宽?
  13. 网速由100M变成10M的原因与解决方法
  14. python验证角谷_角谷猜想-随心随性无为而为-51CTO博客
  15. Microsoft.Office.Interop.Word 创建word
  16. Python 抓取 快代理、西刺代理 、西拉代理等等 构建免费代理池
  17. Mac 环境下 Java JDK 的安装与环境变量配置详解(已完美解决)
  18. 从985非科班到网易伏羲CV算法岗
  19. 恒大造车,从来都不是梦
  20. iPhone 在手,优势在沃

热门文章

  1. 梯度下降和delta法则
  2. 吴恩达深度学习5.3练习_Sequence Models_Neural machine translation with attention
  3. 论文阅读笔记五十三:Libra R-CNN: Towards Balanced Learning for Object Detection(CVPR2019)
  4. JPA、Hibernate、Mybatis的区别
  5. 更新yum源却忘了生成缓存 造成每次启动机器报:the package list needs to be rebuilt...
  6. mysql优化连接数防止访问量过高的方法
  7. 创建精简的SharePoint页面
  8. Visual Studio 2010 实用功能总结 II
  9. nginx配置文件祥解
  10. Luogu 3479 [POI2009]GAS-Fire Extinguishers