前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用python解决两个链表中的公共节点问题

用python解决两个链表中的公共节点问题

作者头像
算法与编程之美
发布2023-12-13 11:52:30
1610
发布2023-12-13 11:52:30
举报
文章被收录于专栏:算法与编程之美

1 问题

输入两个链表,如何可以快速找出它们的第一个公共结点?

2 方法

两个有共同节点的链表是Y型结构,也就是自第一个公共节点开始,都是重合的。问题要求,要找到第一个公共节点,可以反其道而行之,从后往前找,如果是重合节点,这两个节点一定是相等的,所以最后一个相等的节点就是第一个公共的节点。具体方法可以先将每个链表中的节点循环添加到栈中,然后从栈中弹出,一一比较即可。

代码清单 1

class ListNode(self, x): self.val = x self.next = None class Solution: def findCommonNode(self, pHead1, pHead2): #首先判断是否为空 if not pHead1 or not pHead2: return None #两个辅助栈,将数据添加进去 stack1 = [] stack2 = [] while pHead1: stack1.append(pHead1) pHead1 = pHead1.next while pHead2: stack2.append(pHead2) pHead2 = pHead2.next #定义要输出的变量,开始比较栈的值是否一样 res = None while stack1 and stack2: p1 = stack1.pop() p2 = stack2.pop() if p1.val == p2.val: res = p1 else: break return res l1 = ListNode(1) l1.next = ListNode(5) l1.next.next = ListNode(7) l1.next.next.next = ListNode(9) l2 = ListNode(2) l2.next = ListNode(3) l2.next.next = ListNode(4) l2.next.next.next = ListNode(5) l2.next.next.next.next = ListNode(7) l2.next.next.next.next.next = ListNode(9) test = Solution() test.findCommonNode(l1,l2).val

3 结语

此方法主要是比较两个链表里面的字是相同的即可,可以从后往前找,利用栈先进后出,后进先出的特点,弹出的值最后一个相等的节点就是第一个公共的节点。第二种方法是比较两个链表的长度,让长的先走|l1-l2|步,两个链表同在一起跑线上,第一相等的就是第一个公共点。此方法还不够完善在以后可以再继续改进和改善,以此来寻求更好的代码解决此类问题。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-12-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与编程之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档