(链表) 剑指 Offer 52. 两个链表的第一个公共节点 ——【Leetcode每日一题】

news2024/9/23 15:32:33

❓剑指 Offer 52. 两个链表的第一个公共节点

难度:简单

输入两个链表,找出它们的第一个公共节点。

如下面的两个链表:
在这里插入图片描述
在节点 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(n) O(n) 时间复杂度,且仅用 O ( 1 ) O(1) O(1) 内存。
  • 本题与160. 相交链表相同。

💡思路:双指针

A 的长度为 a + cB 的长度为 b + c,其中 c 为尾部公共部分长度,可知:
a + c + b = b + c + a a + c + b = b + c + a a+c+b=b+c+a

  • 当访问链表 A 的指针访问到链表尾部时,令它从链表 B 的头部重新开始访问链表 B
  • 同样地,当访问链表 B 的指针访问到链表尾部时,令它从链表 A 的头部重新开始访问链表 A

这样就能控制访问 AB 两个链表的指针能同时访问到交点。

🍁代码:(C++、Java)

C++

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        ListNode* cur1 = headA;
        ListNode* cur2 = headB;
        while(cur1 != cur2){
            cur1 = (cur1 == nullptr) ? headB : cur1->next;
            cur2 = (cur2 == nullptr) ? headA : cur2->next;
        }
        return cur1;
    }
};

Java

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
class Solution {
    ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        ListNode cur1 = headA, cur2 = headB;
        while(cur1 != cur2){
            cur1 = (cur1 == null) ? headB : cur1.next;
            cur2 = (cur2 == null) ? headA : cur2.next;
        }
        return cur1;
    }
}

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( m + n ) O(m+n) O(m+n),其中 mn 是分别是链表 headAheadB 的长度。两个指针同时遍历两个链表,每个指针遍历两个链表各一次。
  • 空间复杂度 O ( 1 ) O(1) O(1)

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我LeetCode主页 / CSDN—力扣专栏,每日更新!

注: 如有不足,欢迎指正!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/798772.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

三星GalaxyWatch放弃iOS:无法给用户一致的体验,还不如“丢掉”

昨晚,三星发布了全新的Galaxy Watch 6系列智能手表。然而,对于苹果手机用户来说,这个消息可能并不那么重要。因为从2021年开始,三星决定转向Wear OS系统,并计划在Galaxy Watch 4及以后的新款智能手表上采用该系统&…

Python基础语法第八章之使用库

目录 一、使用库 二、标准库 2.1认识标准库 2.2使用 import 导入模块 2.3第三方库 2.3.1认识第三方库 2.3.2使用 pip 一、使用库 库 就是是别人已经写好了的代码, 可以让我们直接拿来用. 按照库的来源, 可以大致分成两大类 标准库: Python 自带的库. 只要安装了 Pytho…

JavaEE——SpringMVC中的常用注解

目录 1、RestController (1)、Controller (2)、ResponseBody 2、RequestMappping (1)、定义 (2)、使用 【1】、修饰方法 【2】、修饰类 【3】、指定方法类型 【4】、简化版…

朝花夕拾思维导图怎么画?看看这种绘制方法

朝花夕拾思维导图怎么画?绘制思维导图的好处有很多,首先它可以帮助人们更好地组织和管理知识,提高工作效率和学习效果。其次,绘制思维导图可以帮助人们更好地记忆知识点和理解知识点。总之,绘制思维导图可以帮助人们更…

字符串函数介绍应用

字符串 1.前言 C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在 常量字符串中或者字符数组中。 字符串常量适合于那些对他不做修改的函数。 2.库函数及其模拟实现 2.1 strlen函数 size_t strlen ( const char *…

机器学习深度学习——多层感知机的简洁实现

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——多层感知机的从零开始实现 📚订阅专栏:机器学习&&深度学习 希望文章对你…

东南大学轴承故障诊断(Python代码,CNN模型,适合复合故障诊断研究)

运行代码要求: 代码运行环境要求:Keras版本>2.4.0,python版本>3.6.0 本次实验主要是在两种不同工况数据下,进行带有复合故障的诊断实验,没有复合故障的诊断实验。 实验结果证明,针对具有复合故障的…

Linux系统MySQL数据库的备份及应用

本节主要学习了MySQL数据库的备份:概念,数据备份的重要性,造成数据丢失的原因,备份的类型,常见的备份方法,实例与应用等。 目录 一、概述 二、数据备份的重要性 三、造成数据丢失的原因 四、备份类型 …

AMEYA360:ROHM罗姆授权代理有哪些?

罗姆(ROHM)株式会社是全球知名的半导体厂商之一,总部所在地设在日本京都市,1958年作为小电子零部件生产商在京都起家的罗姆,于1967年和1969年逐步进入了晶体管、二极管领域和IC等半导体领域。2年后的1971年,罗姆作为第一家进入美国…

K8S故障排查

故障现象:部署pod时,报错没发调度到节点。 排查步骤: 1、查看集群的状态 [rootk8s-master1 nginx]#kubectl get nodes2、查看k8s组件的状态-kubelet,kube-apiservice 3、查看docker的Cgroup driver和k8s的Cgroup driver类型&…

list源码分析,基于c++ 和vs2019,cpp20标准

list源码分析,基于c 和vs2019,cpp20标准。结构确实如图,双向环形链表。

Qt C++实现Excel表格的公式计算

用Qt的QTableViewQStandardItemModelQStyledItemDelegate实现类似Excel表格的界面,在parser 模块中提供解析表格单元格输入的公式。单元格编辑结束后按回车进行计算和更新显示。 效果如下: 支持的公式计算可以深度嵌套,目前parser模块中仅提…

【C语言day08】

int n5; int a[n][n2] 数组定义下角标不能为变量 注:C99标准中支持了使用变量本题考查的是二维数组的元素访问,A选项是 正确的,X[i]就是第i行的数组名,数组名表示首元素的地址,X[i]表示第i行的第一个元素的地址&#…

【开源项目】智慧高铁站~经典开源项目数字孪生智慧高铁站——开源工程及源码

广州南站工程和源码免费赠送,人人都可探索其魅力! 项目介绍 广州南站,中国最大的综合交通枢纽之一,处于广州市珠江新城中轴线上,是广州南沙新区的门户之一。利用数字孪生技术,通过3Dmaxs技术实现数据和场景…

MySQL基础扎实——MySQL中各种数据类型之间的区别

在MySQL中,有各种不同的数据类型可供选择来存储不同类型的数据。下面是一些常见的数据类型以及它们之间的区别: 整数类型: TINYINT:1字节,范围为-128到127或0到255(无符号)。SMALLINT&#xff1…

Hadoop的伪分布式安装方法

实验环境: 操作系统:Linux (Ubuntu 20.04.5) Hadoop版本:3.3.2 JDK版本:1.8.0_162 (1)创建 hadoop 用户(使用 /bin/bash 作为 Shell)、设置密码(建议简单&#xff09…

YOLO算法改进指南【中阶改进篇】:9.添加S2-MLPv2注意力机制

一、理论知识 S2MLPv2 依是百度提出的用于视觉的空间位移 MLP 架构,其作者以及顺序与 S2MLP 一模一样,其论文为 S2-MLPv2: Improved Spatial-Shift MLP Architecture for Vision。S2MLPv2 的修改点主要在于三处:金字塔结构(参考 ViP)、分三类情况进行考虑(参考 ViP)、使…

注解和反射02--Java反射

反射 动态和静态语言获取反射对象Java反射机制提供的功能Java反射优缺点反射相关的主要API 动态和静态语言 要学习反射,首先我们需要了解一下静态和动态语言。 动态语言:是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可…

【C++11】——auto关键字、范围for与指针控制nullptr

目录 1.auto关键字 1.1 auto简介 1.2 auto使用规则 1.3 auto不能推导的场景 1.4 auto的实际应用价值 2. 范围for 2.1 范围for的语法 2.2 范围for的使用条件 3. 指针空值nullptr 1.auto关键字 1.1 auto简介 在早期C/C中auto的含义是:使用auto修饰的变量&a…

npm封装插件简记

以下是可能出现的报错信息: 按需引入第三方库: