LeetCode如何求两个链表的第一个公共节点
发表于:2024-11-20 作者:千家信息网编辑
千家信息网最后更新 2024年11月20日,这篇文章主要介绍LeetCode如何求两个链表的第一个公共节点,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!题目描述输入两个链表,找出它们的第一个公共节点。如果两个链表没有交点
千家信息网最后更新 2024年11月20日LeetCode如何求两个链表的第一个公共节点
这篇文章主要介绍LeetCode如何求两个链表的第一个公共节点,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
题目描述
输入两个链表,找出它们的第一个公共节点。
如果两个链表没有交点,返回 null. 在返回结果后,两个链表仍须保持原有的结构。 可假定整个链表结构中没有循环。 程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。
题目样例
示例
输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3 输出:Reference of the node with value = 8 输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。
题目思考
如何做到仅用 O(1) 内存得出结果?
解决方案
思路
一个比较容易想到的思路是先遍历其中一个链表, 将节点存入集合中, 然后遍历另一个链表, 查看节点是否存在于集合中, 存在则说明找到. 这样虽然时间复杂度是 O(N), 但空间复杂度也是 O(N), 不满足题目要求 重新观察题目示例, 假设链表 A 和 B 的共享部分长度为 shared, 各自前面独占部分长度为 a 和 b, 那么 A 的总长度为 a+shared
, B 的总长度为b+shared
根据交换律, A+B 的长度等于 B+A 的长度, 也即 a+shared+b+shared == b+shared+a+shared
根据上面这个式子, 我们可以定义两个指针, 分别从 A 和 B 的开头出发, 达到终点后换成另一个链表的起点继续走: 如果 A 和 B 有交点的话, 很显然两个指针会在交点处碰面, 共同走完剩余的 shared 部分; 而如果没交点的话, 两个指针只可能共同走到最后的空节点, 此时就返回 null 特别注意一点, 我们遍历到最后一个节点的时候, 不能直接跳到开头, 而是应该先到末尾后面的空节点, 然后再跳到另一个链表的开头. 因为如果不进入空节点的话, 对于没有交点的情况就永远不可能跳出循环了(永远走不到末尾之后的空节点, 两个指针对应节点永远不可能相等)
复杂度
时间复杂度 O(N): 只需要遍历两遍 空间复杂度 O(1): 只定义了几个变量
代码
class Solution:
def getIntersectionNode(self, headA: ListNode,
headB: ListNode) -> ListNode:
a, b = headA, headB
while a != b:
# a如果到达A的末尾之后的空节点, 就置为B的起点重新遍历
a = headB if not a else a.next
# b如果到达B的末尾之后的空节点, 就置为A的起点重新遍历
b = headA if not b else b.next
return a
以上是"LeetCode如何求两个链表的第一个公共节点"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
节点
两个
复杂
复杂度
长度
交点
题目
指针
末尾
开头
时间
起点
部分
输入
内存
内容
思路
示例
空间
篇文章
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
券商每天重启服务器
材料价格数据库的整理
软件开发环境与工具的起源
网络安全的设计流程
工信部网络安全龚文主任有吗
sql如何使用当前数据库
企业学习软件开发报价
普陀区特定软件开发密度
卫生院信息网络安全培训
中国高科技公司全是互联网公司
北京网络软件开发哪家便宜
网络安全法 市级及以上
省委网络安全学科建设
网络安全大厂排名
软件开发写文档
网络安全容易被迷惑的误区
华为入职考试网络安全考试
阿里云 网络安全 招聘
2020年网络安全周宣传片
淮安工程软件开发咨询报价
宁波财务软件开发公司电话
邯郸移动软件开发
乡镇网络安全周宣传方案
深圳网络安全整改
戴尔机架式r750服务器
网络安全容易被迷惑的误区
汉口银行软件开发岗待遇
市北区ios软件开发哪家好
平谷区定制软件开发特点
数据库连接有上限吗