leetcode链表之如何查找两个链表的第一个公共节点
问题描述:
给定两个单链表,链表可能存在公共节点,即两个链表在某个节点处开始相交。实现一个函数,找到两个链表的第一个公共节点。若链表无公共节点,返回 null。
方法一:暴力法
1. 遍历链表 A 的每一个节点 a1、a2、a3...an,对于每个节点,遍历链表 B 的每一个节点 b1、b2、b3...bn,去寻找是否有相同的节点。
2. 若找到相同的节点,则该节点即为第一个公共节点。
复杂度分析:
- 时间复杂度:O(m*n),其中 m 和 n 分别是链表 A 和链表 B 的长度。
- 空间复杂度:O(1)。
方法二:双指针法
1. 创建两个指针 pA 和 pB,初始时分别指向链表 A 和链表 B 的头节点。
2. 同时遍历两个链表,若遍历到链表末尾,则将指针重新指向另一个链表的头节点。当两个指针相等时,即找到第一个公共节点或者两个链表都为 null。
复杂度分析:
- 时间复杂度:O(m+n),其中 m 和 n 分别是链表 A 和链表 B 的长度。
- 空间复杂度:O(1)。
方法三:计算链表长度
1. 遍历链表 A 和链表 B,分别计算出它们的长度,设为 m 和 n。
2. 长链表先走 |m-n| 步,然后两个链表同时遍历,直到找到第一个公共节点。
复杂度分析:
- 时间复杂度:O(m+n),其中 m 和 n 分别是链表 A 和链表 B 的长度。
- 空间复杂度:O(1)。
上一篇 线程池的由来是什么 下一篇 Reactor模型是什么呢
猜您想看
-
GPT在在线课程生成和评测中的应用
GPT在在线课...
2023年05月15日 -
如何在 Magisk Manager 中使用置换框架?
如何在Magi...
2023年04月17日 -
如何破解内网hash值
如何破解内网h...
2023年07月21日 -
初入网易云音乐的必备技巧,让你可以更好地使用它的功能
1、熟悉网易云...
2023年05月15日 -
Hyperledger 中怎么利用Fabric和Composer实现区块链
1、Fabri...
2023年05月23日 -
如何在Linux中使用cp命令实现文件或目录的复制和移动
1. cp命令...
2023年05月15日