Leetcode.剑指 Offer II 023. 两个链表的第一个重合节点

news2024/11/26 8:58:19

题目链接

Leetcode.剑指 Offer II 023. 两个链表的第一个重合节点 easy

题目描述

给定两个单链表的头节点 headAheadB,请找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null

注意,函数返回结果后,链表必须 保持其原始结构

示例 1:

在这里插入图片描述

输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3
输出:Intersected at ‘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
输出:Intersected at ‘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 。

提示:

  • listA 中节点数目为 m
  • listB 中节点数目为 n
  • 0 < = m , n < = 3 ∗ 1 0 4 0 <= m, n <= 3 * 10^4 0<=m,n<=3104
  • 1 < = N o d e . v a l < = 1 0 5 1 <= Node.val <= 10^5 1<=Node.val<=105
  • 0 <= skipA <= m
  • 0 <= skipB <= n
  • 如果 listA 和 listB 没有交点,intersectVal0
  • 如果 listA 和 listB 有交点, i n t e r s e c t V a l = = l i s t A [ s k i p A + 1 ] = = l i s t B [ s k i p B + 1 ] intersectVal == listA[skipA + 1] == listB[skipB + 1] intersectVal==listA[skipA+1]==listB[skipB+1]

分析:双指针

有交点的情况:

在这里插入图片描述
我们发现:

  • 指针aheadA出发,一直走,如果a指向null了,就将 a重新指向为 headB。当指针 a第二次走到交点时,走过的距离为 x + z + y
  • 指针bheadB出发,一直走,如果b指向null了,就将 b重新指向为 headA。当指针 b第二次走到交点时,走过的距离为 y + z + x

即,两个指针按照以上的走法的话,他们是一定会在交点相遇的。

没有交点的情况:

在这里插入图片描述

两个指针 ab还是按照之前的走法,当他们走过 x+y的距离时,他们会同时指向 null

时间复杂度: O ( n ) O(n) O(n)

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) {
        if(headA == nullptr || headB == nullptr) return nullptr;
        ListNode *a = headA , *b = headB;
        while(a != b){
            a = (a == nullptr ? headB : a->next);
            b = (b == nullptr ? headA : b->next);
        }
        return a;
    }
};

Python代码:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
        if not headA or not headB:
            return None
        a , b = headA , headB
        while a != b:
            a = headB if a==None else a.next
            b = headA if b==None else b.next
        return a

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

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

相关文章

Lumion 2023即将上线,低配电脑如何驾驭Lumion

年更选手Lumion的更新速度“从不让人失望”&#xff0c;自从Lumion 12更新完之后&#xff0c;官方意料之中的没了动静。但是就在这几天&#xff0c;官方终于放出了首支Lumion 2023的更新预告&#xff0c;并且宣布将于本月中旬发布&#xff01;Lumion 2023主要变化是支持光线追踪…

【Linux:环境变量的理解】

目录 1 Z(zombie)-僵尸进程 2 孤儿进程 3 环境变量 3.1 基本概念 3.2 测试HOME 3.3 和环境变量相关的命令 3.4 环境变量的组织方式 3.5 环境变量通常是具有全局属性的 在讲环境变量之前&#xff0c;我们先把上次遗留知识点给总结了&#xff08;僵尸进程和孤儿进程&…

fast-api 一款快速将spring的bean发布成接口并生产对应swagger文档调试的轻量级工具

fast-api简介背景开发痛点:分析需求实战fast-api快速上手1. 引入依赖2. FastApiMapping标记service对象3. swagger2/knife4j 在线测试进阶使用开启调试模式支持指定类或包目录发布如何关闭fast-api自定义fast-api的前缀写在最后简介 fast-api 一款快速将spring的bean(service)发…

案例学习6-没有复用思想

背景&#xff1a; 上述两个方法查询同一张表&#xff0c;只是数据结构不同&#xff0c;完全可以合成一份方法&#xff0c;减少代码冗余。 实现效果如下 不传参&#xff0c;查询所有的数据 传入特定参数实现按条件查询&#xff1a; 实现方式&#xff1a; GetMapping(value &q…

Antlr Tool与antlr runtime的版本一致性问题

1. 意外的问题 在学习Antlr4的visitor模式时&#xff0c;使用IDEA的Antlr插件完成了Hello.g4文件的编译&#xff0c;指定的package为com.sunrise.hello 使用visitor模式遍历语法解析树&#xff0c;遍历过程中打印hello语句 public class HelloVisitorImpl extends HelloBaseVi…

Linux进程和任务管理和分析和排查系统故障

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a;小刘主页 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有收获&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的绽放&#xff0…

基于遥感解译与GIS技术生态环境影响评价图件制作

《环境影响评价技术导则 生态影响》&#xff08;HJ 19—2022&#xff09;即将实施&#xff0c;其中生态影响评价图件是生态影响评价报告的必要组成内容&#xff0c;是评价的主要依据和成果的重要表现形式&#xff0c;是指导生态保护措施设计的重要依据。在众多图件中&#xff…

java八股文--java基础

java基础1.什么是面向对象&#xff0c;谈谈对面向对象的理解2.JDK JRE JVM的区别与联系3.和equals4.hashCode与equals5.String StringBuffer StringBuilder的区别6.重载和重写的区别7.接口和抽象类8.List和Set的区别9.ArrayList和LinkedList10.HashMap和HashTable的区别&#x…

详解命令模式本质及其在高复杂调用中的实践案例

作者&#xff1a;范灿华 阿里同城履约物流技术团队 命令模式是一种设计模式&#xff0c;总结了在特定场景下的最佳设计实践。本文将为大家介绍命令模式的模式本质及灵活运用&#xff0c;并通过一个真实的电商履约系统中的库存调用需求为案例&#xff0c;分享其在高复杂调用中的…

【C语言】8道经典指针笔试题(深度解剖)

上一篇我们也介绍了指针的笔试题&#xff0c;这一篇我们趁热打铁继续讲解8道指针更有趣的笔试题&#xff0c;&#xff0c;让大家更加深刻了解指针&#xff0c;从而也拿下【C语言】指针这个难点! 本次解析是在x86&#xff08;32位&#xff09;平台下进行 文章目录所需储备知识笔…

3分钟上手,2小时起飞!教你玩转OceanBase Cloud

盼星星盼月亮&#xff01;掰掰手指&#xff0c;距离 3 月 25 日还有 123456......两周啦&#x1f929;~ 除了白天的主论坛和分论坛的精彩分享外&#xff0c;晚间的 3 场 Hands-on Workshop 动手实验营也深得大家期待&#xff0c;从部署到迁移&#xff0c;从 On-Premise 到 Clou…

OpenAI——CLIPs(代码使用示例)

OpenAI——CLIPs(打通NLP与CV) Open AI在2021年1月份发布Contrastive Language-Image Pre-training(CLIP),基于对比文本-图像对对比学习的多模态模型&#xff0c;通过图像和它对应的文本描述对比学习&#xff0c;模型能够学习到文本-图像对的匹配关系。它开源、多模态、zero-s…

【Three.js】shader特效 能量盾

shader特效之能量盾前言效果噪点图主要代码index.htmldepth-fs.jsdepth-vs.jsshield-fs.jsshield-vs.js相关项目前言 效果噪点图 为了可以自定义能量球的效果&#xff0c;这里使用外部加载来的噪点图做纹理&#xff0c;省去用代码写特效的过程。 主要代码 index.html <…

数据表(一) - 数据表的种类

在游戏项目中缺少不了数据表&#xff0c;数据决定了游戏的整个进程&#xff0c;因此怎么用数据表配置数&#xff0c;配置数据时是否方便成了关键的问题。那么如何来理解数据表的存在呢&#xff1f;数据表完全可以认为是一个本地的数据库&#xff0c;只不过这个数据库里的数据是…

Facebook Shop和Facebook Marketplace如何选择?

Facebook Shop和Facebook Marketplace都是可以让facebook用户售卖商品的平台&#xff0c;这两者有什么区别&#xff1f;在facebook上开网店要使用那一个平台更好&#xff1f;又要如何开通使用&#xff1f;这篇文章都会一一告诉你&#xff01; 一、Facebook Shop Facebook shop主…

【项目实战】Protobuf入门介绍以及如何生成proto对象文件

一、 Protobuf 介绍 1.1 诞生背景 常用的数据格式是 JSON&#xff0c;XML&#xff0c;或者 YAML&#xff0c;这些都是文本格式&#xff0c;特点是容易被人识别&#xff0c;非常容易编程&#xff0c;缺点是数据量有点大。在某些特定场景下&#xff0c;比如帧同步、各个应用之间…

个人创业做什么比较好?需要具备哪些基本素质?

个人创业是一种创造、追求自由和独立的方式&#xff0c;也是许多人梦寐以求的事情。但是&#xff0c;很多人并不知道该做什么才能取得成功。在这篇文章中&#xff0c;我将探讨一些个人创业的建议&#xff0c;希望能够帮助你找到自己的方向。 1. 站在行业创新的前沿 在当前竞争…

Echarts数据可视化图表设计 学习笔记 python

&#x1f4e3; 概况 Echarts 是一个由百度开源的数据可视化&#xff0c;凭借着良好的交互性&#xff0c;精巧的图表设计&#xff0c;得到了众多开发者的认可。而 Python 是一门富有表达力的语言&#xff0c;很适合用于数据处理。当数据分析遇上数据可视化时&#xff0c;pyechar…

高端Zynq ultrascale+使用GTH回环测试 提供2套工程源码和技术支持

这目录1、前言2、GTH 高速收发器介绍GTH 高速收发器结构参考时钟的选择和分配GTH 发送端GTH 接收端3、vivado工程详解4、上板调试验证5、福利&#xff1a;工程代码的获取1、前言 Xilinx系列FPGA内置高速串行收发器&#xff0c;配有可配置的IP方便用户调用&#xff0c;按照速度…

QML ComboBox简介

1.简介 ComboBox是一个组合按钮和弹出列表。它提供了一种以占用最小屏幕空间的方式向用户显示选项列表的方法。 ComboBox用数据模型填充。数据模型通常是JavaScript数组、ListModel或整数&#xff0c;但也支持其他类型的数据模型。 常用属性&#xff1a; count : int&#x…