相交链表(LeetCode 160)

文章目录

  • 1.问题描述
  • 2.难度等级
  • 3.热门指数
  • 4.解题思路
    • 方法一:暴力法
    • 方法二:哈希表
    • 方法三:双栈
    • 方法四:双指针:记录链表长度
    • 方法五:双指针:互换遍历
  • 5.实现示例
  • 参考文献

1.问题描述

给两个单链表的头节点 headA 和 headB ,请找出并返回两个单链表相交的起始节点。如果不存在相交节点,返回 null 。

题目数据保证整个链式结构中不存在环。

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

示例 1:

在这里插入图片描述
相交返回结点 8。

示例 2:

在这里插入图片描述
相交返回结点 2。

示例 3:

在这里插入图片描述
不相交返回 null。

进阶: 你能否设计一个时间复杂度 O(m + n) 、仅用 O(1) 内存的解决方案?

2.难度等级

Easy。

3.热门指数

★★★★★

出题公司:阿里、腾讯、字节。

4.解题思路

解这道题之前,我们需要首先明确一个概念:何为相交?

相交指的是结点为同一个结点,那么指向结点的指针是相同的,而不是第一个结点值相同。

如果不考虑时间和空间复杂度,那么有多种解法。

假设 m 和 n 是分别是链表 headA 和 headB 的长度。

方法一:暴力法

从头开始遍历第一个链表,遍历第一个链表的每个节点时,同时从头到尾遍历第二个链表,看是否有相同的节点,第一次找到相同的节点即第一个交点。

若第一个链表遍历结束后,还未找到相同的节点,即不存在交点。

时间复杂度: O ( n 2 ) O(n^2) O(n2)

空间复杂度: O ( 1 ) O(1) O(1)

方法二:哈希表

判断两个链表是否相交,可以使用哈希集合存储链表节点。

首先遍历链表 headA,将链表中的每个节点加入哈希表中。然后遍历链表 headB,判断节点是否在哈希表中。

如果链表 headB 中的所有节点都不在哈希集合中,则两个链表不相交,返回 null。

时间复杂度: O(m+n),需要遍历两个链表各一次。

空间复杂度: O(m),需要使用哈希表存储链表 headA 的全部节点。

方法三:双栈

我们可以从头遍历两个链表。创建两个栈,第一个栈存储第一个链表的节点,第二个栈存储第二个链表的节点。每遍历到一个节点时,就将该节点入栈。两个链表都入栈结束后。

则通过判断栈顶的节点是否相等即可判断两个单链表是否相交。因为我们知道,若两个链表相交,则从第一个相交节点开始,后面的节点都相交。

若两链表相交,则循环出栈,直到遇到两个出栈的节点不相同,则这个节点的后一个节点就是第一个相交的节点。

时间复杂度: O(m+n)。需要遍历两个链表各两次,一次是入栈,一次是出栈。

空间复杂度: O(m+n),需要使用两个栈存储链表 headA 和 headB 的所有结点。

方法四:双指针:记录链表长度

同时遍历两个链表到尾部,同时记录两个链表的长度。若两个链表最后的一个节点相同,则两个链表相交。

有两个链表的长度后,我们就可以知道哪个链表长,设较长的链表长度为 len1,短的链表长度为 len2。

则先让较长的链表向后移动 len1-len2 个长度。然后开始从当前位置同时遍历两个链表,当遍历到的链表的节点相同时,则这个节点就是第一个相交的节点。

时间复杂度: O ( m + n ) O(m+n) O(m+n),两个指针同时遍历两个链表,然后再遍历两个链表至相同结点。

空间复杂度: O ( 1 ) O(1) O(1)

方法五:双指针:互换遍历

当链表 headA 和 headB 都不为空时,创建两个指针 pA 和 pB,初始时分别指向两个链表的头节点 headA 和 headB,然后将两个指针依次遍历两个链表的每个节点。具体做法如下:

  • 每步操作需要同时更新指针 pA 和 pB。

  • 如果指针 pA 不为空,则将指针 pA 移到下一个节点;如果指针 pB 不为空,则将指针 pB 移到下一个节点。

  • 如果指针 pA 为空,则将指针 pA 移到链表 headB 的头节点;如果指针 pB 为空,则将指针 pB 移到链表 headA 的头节点。

  • 当指针 pA 和 pB 指向同一个节点或者都为空时,返回它们指向的节点或者 null。

为什么第一次遍历完后互换从头遍历后,如果相交会同时到达相交结点呢?

假设下面是一个相交的两个链表,省去了结点。其中链表 headA 的长度为 a + c = m,链表 headB 的长度为 b + c = n。

在这里插入图片描述

因为 a + c + b 等于 b + c + a,所以第一次遍历完后互换从头遍历,会同时到达相交结点。

如果两个链表不相交,也会同时到达尾结点,因为 m + n 等于 n + m。

时间复杂度: O ( m + n ) O(m+n) O(m+n),两个指针同时遍历两个链表,然后再遍历两个链表至相同结点。

空间复杂度: O ( 1 ) O(1) O(1)

5.实现示例

面以 Golang 为例,给出「双指针:互换遍历」的实现。

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func getIntersectionNode(headA, headB *ListNode) *ListNode {
    pA, pB := headA, headB
    for pA != nil || pB != nil {
        if pA == pB {
            return pA
        }
        if pA == nil {
            pA = headB
        } else {
            pA = pA.Next
        }
        if pB == nil {
            pB = headA
        } else {
            pB = pB.Next
        }     
    }
    return nil
}

参考文献

160. 相交链表 - LeetCode
判断两个单链表是否相交及找到第一个交点原创 -CSDN

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

短视频账号剪辑矩阵+无人直播系统源头开发

抖去推爆款视频生成器,通过短视频矩阵、无人直播,文案引流等,打造实体商家员工矩阵、用户矩阵、直播矩阵,辅助商家品牌曝光,团购转化等多功能赋能商家拓客引流。 短视频矩阵通俗来讲就是批量剪辑视频和批量发布视频&am…

Java 对接智谱 AI(官方 sdk 是真垃圾)

官方 sdk 狗屎。 一堆密钥不知道啥玩意,文档也没写好。 python 版本的就不清楚,应该支持会比较好,果然做 ai 应用后端开发还是得使用 python 比较好。 那么要如何对接智谱 AI 呢?用小博哥的这个版本,虽然不是官方的…

光伏基础知识

快速了解国内光伏历史 美国是最早制定光伏发电的发展规划的国家,国内从1958年开始专注于太阳电池的研究,到1971年3月首次将太阳电池成功地应用于我国第2颗卫星上,再到1979年开始生产单晶硅太阳电池,直到20世纪90年代中期后光伏发…

ElasticSearch篇---第六篇

系列文章目录 文章目录 系列文章目录前言一、ElasticSearch中的副本是什么?二、ElasticSearch中的分析器是什么?三、什么是ElasticSearch中的编译器?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女…

技术培训邀请函|云时代数据安全建设和实践

在数字化变革时代,云计算渗透到各个行业和领域中,赋能业务创新发展,但机遇与挑战并存。数据作为战略性资产和核心生产要素,在混合多云环境面临着日益严峻的安全风险和越来越多的合规要求。如何实现有效的数据安全保护,…

C++新经典模板与泛型编程:萃取技术中的值萃取

传入一种类型&#xff0c;萃取出另外一种类型 #include <iostream>template<typename T> struct SumFixedTraits;template<> struct SumFixedTraits<char> {using sumT int; };template<> struct SumFixedTraits<int> {using sumT __int…

【华为网络-配置-025】- 同 VLAN 下不同网段通信(启用 Sub 地址)

要求&#xff1a; 1、各接口配置 VLAN 后配置 Sub 地址使 PC1 与 PC3 通信。 一、sub 地址配置 [LSW1]vlan 10 [LSW1]port-group group-member GigabitEthernet 0/0/1 to GigabitEthernet 0/0/2 [LSW1-port-group]port link-type access [LSW1-port-group]port default vla…

2023年【起重机械指挥】考试题库及起重机械指挥考试内容

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 起重机械指挥考试题库根据新起重机械指挥考试大纲要求&#xff0c;安全生产模拟考试一点通将起重机械指挥模拟考试试题进行汇编&#xff0c;组成一套起重机械指挥全真模拟考试试题&#xff0c;学员可通过起重机械指挥…

Node.js版本管理工具NVM(Node Version Manager)的使用

nvm简介 nvm&#xff08;Node Version Manager&#xff09;是一个用于管理 Node.js 版本的工具。它可以让你在同一台计算机上安装并切换多个 Node.js 版本&#xff0c;非常方便。 如何安装 nvm 下载 nvm 安装包 访问 nvm下载地址 &#xff0c;根据你的操作系统选择对应的安…

“触底”来临?!看看专家怎么说!鼎捷2023年H2半导体行业观察报告火热出炉!

半导体行业周期性“触底”&#xff0c;喊了半年多。如今“底”在哪&#xff1f; 面对业内争议颇多的“V”字拐点是否到来&#xff0c;可以盖棺定论&#xff1f; 不确定的因素依然存在。 但多种迹象表明&#xff0c;半导体行业的回暖趋势已逐渐明朗&#xff01; 用数据说话&…

小型洗衣机什么牌子好又便宜?目前口碑最好的迷你洗衣机

随着大家工作的压力越来越大&#xff0c;下了班之后只能想躺平&#xff0c;在洗完澡之后看着还需要手洗的内衣裤真的很头疼。有些小伙伴还有会攒几天再丢进去洗衣机里面一起&#xff0c;而且这样子是非常不好的&#xff0c;用过的内衣裤长时间不清洗容易滋生细菌&#xff0c;而…

MBA-历年数学条件充分判断

已知p&#xff0c;q 为非零实数. 则能确定的值. (1)pq1 &#xff08;2&#xff09; 1. pq1 ; p 1-q ; ;无法确定 1&#xff1b;q ; * * 1;可以确定 信封中装有10张奖券&#xff0c;只有1张有奖.从信封中同时抽取2张奖券&#xff0c;中奖的概率记为 P;从信…

【NLP】如何管理大型语言模型 (LLM)

什么是LLM编排&#xff1f; LLM 编排是管理和控制大型语言模型 (LLM)的过程&#xff0c;以优化其性能和有效性。这包括以下任务&#xff1a; 提示LLM&#xff1a;生成有效的提示&#xff0c;为LLMs提供适当的背景和信息以产生所需的输出。链接LLM&#xff1a; 结合多个LLM的输…

决战排序之巅(一)

决战排序之巅 插入排序直接插入排序 void InsertSort(int* arr, int n)希尔排序 void ShellSort(int* arr, int n)测试插入排序测试函数 void verify(int* arr, int n)测试 InsertSort测试 ShellSort测试速度 InsertSort & ShellSort 选择排序直接选择排序 void SelectSort…

生命在于折腾——使用PD打开OVA格式虚拟机

一、前言 下载了一个封装的工具箱虚拟机&#xff0c;格式是OVA的&#xff0c;PD无法直接打开&#xff0c;之前成功转换后打开过&#xff0c;但那时候没有记录&#xff0c;今天记录一下。 二、过程 有两种方法 1、去vmware官网下载工具VMware OVF Tool 地址&#xff1a;htt…

Spatial Data Analysis(四):空间自相关示例

Spatial Data Analysis&#xff08;四&#xff09;&#xff1a;空间自相关示例 空间自相关是地理信息科学&#xff08;GIS&#xff09;和空间统计学中的重要概念之一&#xff0c;用于研究地理空间上的数据变异性和相关性。空间自相关分析的目标是探讨地理空间中的现象是否呈现…

8路编码器脉冲信号测量或16路DI高速计数器,Modbus RTU模块 YL69

特点&#xff1a; ● 编码器解码转换成标准Modbus RTU协议 ● 可用作编码器计数器或者转速测量 ● 支持8个编码器同时计数&#xff0c;可识别正反转 ● 也可以设置作为16路独立DI高速计数器 ● 编码器计数值支持断电自动保存 ● DI输入和电源之间3000V隔离 ● 通过RS-4…

【Java基础系列】JavaWeb入门

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

GUI的简单概述和基本使用

GUI的概念 1&#xff0c;到目前为止&#xff0c;我们编写的都是控制输入的程序&#xff0c;操作使用非常不直观&#xff0c;采取一直方式让效果呈现在窗口上。 2&#xff0c;GUI及图形界面指采用图像方式显示的用户界面&#xff0c;与早期计算机的命令行界面相比&#xff0c;…

【征稿倒计时十天】第三届高性能计算与通信工程国际学术会议(HPCCE 2023)

【有ISSN、ISBN号&#xff01;&#xff01;往届均已完成EI检索】 第三届高性能计算与通信工程国际学术会议(HPCCE 2023) 2023 3rd International Conference on High Performance Computing and Communication Engineering (HPCCE 2023) 2023年12月22-24日 | 中国哈尔滨 第三…
最新文章