当前位置:网站首页>leetcode 剑指 Offer 52. 两个链表的第一个公共节点
leetcode 剑指 Offer 52. 两个链表的第一个公共节点
2022-07-30 08:52:00 【kt1776133839】
题目描述:
输入两个链表,找出它们的第一个公共节点。
如下面的两个链表:

在节点 c1 开始相交。
样例:
示例 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 个节点。
示例 2:

输入:intersectVal = 2, listA = [0,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1
输出:Reference of the node with value = 2
输入解释:相交节点的值为 2 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [0,9,1,2,4],链表 B 为 [3,2,4]。在 A 中,相交节点前有 3 个节点;在 B 中,相交节点前有 1 个节点。
示例 3:

输入:intersectVal = 0, listA = [2,6,4], listB = [1,5], skipA = 3, skipB = 2
输出:null
输入解释:从各自的表头开始算起,链表 A 为 [2,6,4],链表 B 为 [1,5]。由于这两个链表不相交,所以 intersectVal 必须为 0,而 skipA 和 skipB 可以是任意值。
解释:这两个链表不相交,因此返回 null。
注意:
如果两个链表没有交点,返回 null.
在返回结果后,两个链表仍须保持原有的结构。
可假定整个链表结构中没有循环。
程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。
解题思路:
双指针
使用双指针的方法,可以将空间复杂度降至 O(1)。
只有当链表 headA 和 headB 都不为空时,两个链表才可能相交。因此首先判断链表 headA 和 headB 是否为空,如果其中至少有一个链表为空,则两个链表一定不相交,返回 null。
当链表 headA 和 headB 都不为空时,创建两个指针 pA 和 pB,初始时分别指向两个链表的头节点 headA和 headB,然后将两个指针依次遍历两个链表的每个节点。具体做法如下:
每步操作需要同时更新指针 pA 和 pB。
如果指针 pA 不为空,则将指针 pA 移到下一个节点;如果指针 pB 不为空,则将指针 pB 移到下一个节点。
如果指针 pA 为空,则将指针 pA 移到链表 headB 的头节点;如果指针 pB 为空,则将指针 pB 移到链表 headA 的头节点。
当指针 pA 和 pB 指向同一个节点或者都为空时,返回它们指向的节点或者 null。
Java程序:
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if (headA == null || headB == null) {
return null;
}
ListNode pA = headA, pB = headB;
while (pA != pB) {
pA = pA == null ? headB : pA.next;
pB = pB == null ? headA : pB.next;
}
return pA;
}
}
边栏推荐
- 经历了这样一个阶段的发展之后,数字零售才能有新的进化
- 读书笔记:《这才是心理学:看穿伪心理学的本质(第10版)》
- MySQL [operator]
- 日志导致线程Block的这些坑,你不得不防
- 激活数据潜力 亚马逊云科技重塑云上存储“全家桶”
- The FPGA based protocol 2: the I2C read and write E squared PROM
- 【零基础玩转BLDC系列】以GD32F30x为例定时器相关功能详解
- 虚幻引擎图文笔记:could not be compiled. Try rebuilding from source manually.问题的解决
- MySQL数据库题库
- How to implement Golang DES encryption and decryption?
猜你喜欢
随机推荐
虚幻引擎图文笔记:could not be compiled. Try rebuilding from source manually.问题的解决
统一异常处理导致ResponseBodyAdvice失效
MySQL数据库题库
XP电源维修fleXPower电源X7-2J2J2P-120018系列详解
CSDN21天学习挑战赛
经历了这样一个阶段的发展之后,数字零售才能有新的进化
硬件工程师
百度paddleocr检测训练
Access to display the data
MySQL Explain 使用及参数详解
How to use Jmeter to carry out high concurrency in scenarios such as panic buying and seckill?
Using IN in MySQL will not go through index analysis and solutions
一个低级错误导致的诡异现象——走近科学能拍三集,(C语言)最简单的数组元素读取,不正确!?
BaseQuickAdapter方法getBindingAdapterPosition
Farthest Point Sampling - D-FPS vs F-FPS
电源完整性的去耦和层间耦合电容
一文读懂二十种开关电源拓扑结构
MySQL之COUNT性能到底如何?
Oracle 创建和操作表
获取显示器数据









