当前位置:网站首页>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;
}
}
边栏推荐
- Jenkins 如何玩转接口自动化测试?
- 日志导致线程Block的这些坑,你不得不防
- Detailed description of iperf3 parameter options
- 2022 Hangzhou Electric Multi-School 1st Game
- 九九乘法表
- The FPGA based protocol 2: the I2C read and write E squared PROM
- Apache DolphinScheduler新一代分布式工作流任务调度平台实战-上
- 用示波器揭示以太网传输机制
- 2022/07/29 Study Notes (day19) Exception Handling
- Only after such a stage of development can digital retail have a new evolution
猜你喜欢

C language classic practice questions (3) - "Hanoi Tower (Hanoi)"

涛思 TDengine 2.6+优化参数

Using IN in MySQL will not go through index analysis and solutions

用示波器揭示以太网传输机制

An article to understand service governance in distributed development

Google Cloud Spanner的实践经验

转行软件测试,报培训班3个月出来就是高薪工作,靠谱吗?

PyQt5快速开发与实战 8.1 窗口风格

20220728使用电脑上的蓝牙和汇承科技的蓝牙模块HC-05配对蓝牙串口传输

The use of qsort function and its analog implementation
随机推荐
conda 导出/导出配置好的虚拟环境
都说FPGA高端,它到底能干啥?
Circuit analysis: constant current source circuit composed of op amp and triode
qsort 函数的使用及其模拟实现
[Fun BLDC series with zero basics] Taking GD32F30x as an example, the timer related functions are explained in detail
How to Assemble a Registry
转行软件测试,报培训班3个月出来就是高薪工作,靠谱吗?
2022/07/29 Study Notes (day19) Exception Handling
Concise Notes on Integrals - Types of Curve Integrals of the Second Kind
EMC过不了?都是PCB工程师的锅?
Field interpretation under "Surgical variables (RX SUMM-SURG OTH REG/DIS)" in SEER database
Scala
Apache DolphinScheduler新一代分布式工作流任务调度平台实战-上
LeetCode二叉树系列——94.二叉树的中序遍历
Concise Notes on Integrals - Types of Curve Integrals of the First Kind
信号完整性测试
ACL 2022 | Introduce angular margin to construct comparative learning objectives and enhance text semantic discrimination ability
获取显示器数据
编程界的“躲猫猫”比赛 | 每日趣闻
新手必备!最全电路基础知识讲解