图解LeetCode——剑指 Offer 52. 两个链表的第一个公共节点

news2024/11/15 4:54:31

一、题目

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

二、示例

如下面的两个链表:

在节点 c1 开始相交。

注意:

  • 如果两个链表没有交点,返回 null.
  • 在返回结果后,两个链表仍须保持原有的结构。
  • 可假定整个链表结构中没有循环
  • 程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。

三、解题思路

关于这道题,其实看似题目描述得很简单,但是实际代码实现起来,还是会比较绕的。首先,这里所谓的公共节点,是相同的节点实例对象,而并非val值相同。其次是,程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。那么我们来分析一下两个指针分别从两条链表的头部开始遍历的路径是怎么样的?下面以两种情况进行分析:

3.1> 情况1:存在共同节点

我们创建两个指针p1p2,分别指向第1条链表的头节点和第2条链表的头节点。然后同时向后遍历,并且在遍历过程中进行节点的对比,如果p1==p2(不为null),则说明找到了共同的节点。

那么我们遍历的路径如下:

指针p1】先遍历第1条链表,如果没有找到共同节点,再继续遍历第2条链表。
指针p2】先遍历第2条链表,如果没有找到共同节点,再继续遍历第1条链表。

为什么这样遍历可以遇到共同节点呢? 我们以下面的图为例,共同的节点是Node(6)

指针p1可以到达Node(6)的路径是A 和 A+C+B
指针p2可以到达Node(6)的路径是B 和 B+C+A

又因为p1和p2指针是同时向后遍历的,且遍历的“步长”相同,那么就会在A+C+B == B+C+A的路径下相遇。

3.2> 情况2:不存在共同节点

那么下面我们来看一下如果没有共同节点的情况下,怎么判断呢?

我们p1指针遍历完两条链表后经过的节点数量与p2指针遍历完两条链表后经过的节点数量是相同的,因为

p1经过节点长度是】A+C+B;
p2经过的节点长度是】B+C+A;

那么,当p1和p2遍历完两条链表后,他们一定是p1==p2==null,所以如果出现这种情况,则表示两条链表没有共同的节点。

上面文字描述如果不容易理解,请见下面的图示,其展示了【情况1】和【情况2】两种情况寻找共同节点的步骤。

四、代码实现

class Solution {
    ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        ListNode p1 = headA, p2 = headB;
        while (p1 != p2) {
            p1 = p1 != null ? p1.next : headB; 
            p2 = p2 != null ? p2.next : headA;
        }
        return p1;
    }
}

今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。

更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

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

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

相关文章

代码质量与安全 | ChatGPT能帮到你什么还有待探索,但人工智能真的可以帮你做自动化测试

当听到“人工智能”(AI)时,你会想到什么? 你可能会开始想象科幻电影中的先进的人形机器人或者未来科技,但是,人工智能聊天机器人程序Chat GPT的爆火已经证明,这种“未来主义”技术已经融入了我…

三个月自学自动化测试,薪资15K直接翻倍,鬼知道我经历了什么····

学习软件测试是迫不得已,幸好最后通过自己的付出,得到了满意的回报。希望大家能通过我的经历得到一些帮助和思路。 零基础自学遇到的第一个难题就是需要怎么学,刚开始一头雾水,只能先从网上买些书来看,但是收效甚微。…

Unity中获取地形的法线

序之前,生成了地形图:(42条消息) 从灰度图到地形图_averagePerson的博客-CSDN博客那末,地形的法线贴图怎么获取?大概分为两个部分吧,先拿到法线数据,再画到纹理中去。关于法线计算Unity - Scripting API: M…

第4讲 cameraserver.rc详解(下)

本讲是Android Camera Native Framework专题的第4讲,我们介绍cameraserver.rc详解(下),包括如下内容:Android init语言简介cameraserver.rc详解serviceuser选项group选项ioprio选项task_profiles选项rlimit选项更多&am…

领域自适应 DA Domain Adaptation

领域自适应是与机器学习和转移学习相关的领域。 当我们的目标是从源数据分布中学习在不同(但相关)的目标数据分布上的良好性能模型时,就会出现这种情况。 例如,常见垃圾邮件过滤问题的任务之一在于使模型从一个用户(源…

2023年金三银四必备软件测试常见面试题1500问!!!【测试思维篇】

五、测试思维5.1 打电话功能怎么去测?我们会从几个方面去测试:界面、功能、兼容性、易用性、安全、性能、异常。1)界面我们会测试下是否跟界面原型图一致,考虑浏览器不同显示比例,屏幕分辨率。2)功能&#…

SpringBoot:SpringBoot配置文件application.properties、application.yml 和 application.ymal(2)

SpringBoot配置文件1. 配置文件格式1.1 application.properties配置文件1.2 application.yml配置文件1.3 application.yaml配置文件1.4 三种配置文件优先级和区别2. yaml格式2.1 语法规则2.2 yaml书写2.2.1 字面量:单个的、不可拆分的值2.2.2 数组:一组按…

《分布式技术原理与算法解析》学习笔记Day24

分布式缓存 在计算机领域,缓存是一个非常重要的、用来提升性能的技术。 什么是分布式缓存? 缓存技术是指用一个更快的存储设备存储一些经常用到的数据,供用户快速访问。 分布式缓存是指在分布式环境或者系统下,把一些热门数据…

全面零信任?Dell搞了个“大动作”

1860年,清朝僧格林沁带领数万骑兵,朝着数千英法联军发起猛烈冲锋,企图依靠清朝凶狠的骑兵突击战术击溃对方。然而,面对已经完成了近代化的西方军队,原来无往不利的八旗骑兵被打的土崩瓦解,再无任何抵抗的能…

Editor工具开发基础四:窗口EditorWindow

目录 1.设置窗口位置和大小 2.设置窗口最大和最小 3.设置窗口标题 4.设置窗中窗 BeginWindows和EndWindows 5.添加窗中窗可拖动 GUI.DragWindow() 完整代码: public class EditorToolWindow : EditorWindow {public static EditorToolWindow ins;[MenuItem(&q…

Elasticsearch:保护你的 Elasticsearch 实例 - 如何使用带有内置证书的 Docker 镜像

使用 docker 来构建 Elasticsearch 集群为开发者们带来了极大的方便。在我之前的文章中: Elasticsearch:使用 Docker compose 来一键部署 Elastic Stack 8.x Elasticsearch:如何在 Docker 上运行 Elasticsearch 8.x 进行本地开发 Elastic&am…

JavaSE-线程池(5)- ThreadPoolExecutor常用方法

JavaSE-线程池(5)- ThreadPoolExecutor常用方法 invokeAll ExecutorService 接口中定义的方法,给定一组任务,在所有任务执行完成时返回一个 Futures 列表,其中包含它们的状态和结果。 /*** Executes the given task…

Java基础:常见API(Math,System,Runtime,Object,BigInteger,BigDecima)

1.常见API 1.1 Math类 向上取整是向着数轴右边走的意思, 负数也是. 也可以叫进一法, 不论正数负数都会往右走一. 向下取整是向着数轴左边走. 也可以叫去尾法, 不论正负数都会将小数点后的数字去掉. 1.1.2 练习 // 判断有多少水仙花数int count 0;for (int i 100; i < 1…

代码随想录算法训练营九期第十三天 | 239. 滑动窗口最大值、347.前 K 个高频元素、总结

打卡第十三天&#xff0c;昨天休息&#xff0c;今天继续栈和队列&#xff0c;重新复习了单调队列&#xff0c;上次看ACwing的视频学了单调队列&#xff0c;没有完全学明白&#xff0c;重学之后比之前清晰多了 今日任务 滑动窗口最大值 347.前 K 个高频元素总结 239. 滑动窗口最…

【Ap AutoSAR入门与实战开发02】-【Ap_s2s模块01】: s2s的背景

总目录链接==>> AutoSAR入门和实战系列总目录 文章目录 1 s2s的背景?2 AUTOSAR 方法应支持车辆的无缝开发2.1 面向服务的ECU的解读2.2 面向信号的ECU的解读2.3 通过网关ECU实现转换1 s2s的背景? Cp AutoSAR基于传统的can,lin,flexray总线的通信,一般是面向信号设…

汽车网络安全需求分析方法综述

引言&#xff1a; 近年来&#xff0c;汽车的网络安全问题逐渐被重视&#xff0c;在汽车产品的全生命周期中&#xff0c;需要进行网络安全风险管理&#xff0c;其主要活动包括网络安全需求分析、安全策略设计与实施、运营阶段安全监控与应急响应等。 安全需求分析工作作为系统安…

信息安全概论之《密码编码学与网络安全----原理与实践(第八版)》

前言&#xff1a;在信息安全概论课程的学习中&#xff0c;参考了《密码编码学与网络安全----原理与实践&#xff08;第八版&#xff09;》一书。以下内容为以课件为主要参考&#xff0c;课本内容与网络资源为辅助参考&#xff0c;学习该课程后作出的总结。 一、信息安全概述 1…

【蓝桥杯集训9】单调栈、单调队列(模拟栈、模拟队列)专题(3 / 3)

目录 单调栈模板 1、模拟栈 单调队列模板 1、模拟队列 2、双端队列 135. 最大子序和 - 前缀和滑动窗口单调队列 单调栈模板 什么时候用单调栈&#xff1f; 求序列中每一个数左边或右边第一个比它大或小的数 1、单调递增栈 在保持栈内元素单调递增前提下&#xff08;如果…

Redis 主从库如何实现数据一致?

目录 1、主从库间如何进行第一次同步&#xff1f; 2、主从级联模式分担全量复制时的主库压力 3、主从库间网络断了怎么办&#xff1f; 总结 // 好的文章&#xff0c;值得反复去读 Redis 具有高可靠性&#xff0c;这里有两层含义&#xff1a;一是数据尽量少丢失&#xff0c;…

2023JAVA面试题全集超全面超系统超实用!早做准备早上岸

2022年我凭借一份《Java面试核心知识点》成功拿下了阿里、字节、小米等大厂的offer&#xff0c;两年的时间&#xff0c;为了完成我给自己立的flag&#xff08;拿下一线互联网企业offer大满贯&#xff09;&#xff0c;即使在职也一直在不断的学习与备战面试中&#xff01;——或…