Leetcode160. 相交链表

LeetCode160. 相交链表(Java) 阅读详情

Every day a leetcode

题目来源:160. 相交链表

解法1:遍历

遍历链表listA,使用哈希集合存储它的每一个节点。

再遍历链表listB,每经过一个节点,就在哈希集合中查找,若存在相同的节点,说明两个链表相交,返回当前节点指针;否则遍历到listB的结尾都没有相交的节点,返回空指针。

代码:

/*
 * @lc app=leetcode.cn id=160 lang=cpp
 *
 * [160] 相交链表
 */

// @lc code=start
/**
 * 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;
        unordered_set<ListNode *> visited;
        ListNode *temp = headA;
        while (temp)
        {
            visited.insert(temp);
            temp = temp->next;
        }
        temp = headB;
        while (temp)
        {
            if (visited.find(temp) != visited.end())
                return temp;
            temp = temp->next;
        }
        return nullptr;
    }
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n+m),其中n是listA的长度,m是listB的长度。两个指针同时遍历两个链表,每个指针遍历两个链表各一次。

空间复杂度:O(n),其中n是listA的长度,使用哈希集合存储了listA的全部顶点,再加上一个temp指针。

解法2:双指针

如果两个链表相交,那么相交点之后的长度是相同的。

我们需要做的事情是,让两个链表从同距离末尾同等距离的位置开始遍历。这个位置只能是较短链表的头结点位置。

为此,我们必须消除两个链表的长度差:

  1. 指针 pA 指向 A 链表,指针 pB 指向 B 链表,依次往后遍历
  2. 如果 pA 到了末尾,则 pA = headB 继续遍历
  3. 如果 pB 到了末尾,则 pB = headA 继续遍历
  4. 比较长的链表指针指向较短链表head时,长度差就消除了
  5. 如此,只需要将最短链表遍历两次即可找到位置

请添加图片描述

/*
 * @lc app=leetcode.cn id=160 lang=cpp
 *
 * [160] 相交链表
 */

// @lc code=start
/**
 * 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* pA=headA;
        ListNode* pB=headB;
        while(pA != pB)
        {
            pA = pA == nullptr ? headB : pA->next;
            pB = pB == nullptr ? headA : pB->next;
        }
        return pA;
    }
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n+m),其中n是listA的长度,m是listB的长度。

空间复杂度:O(1),只用到了两个指针。

【简单】力扣算法题解析LeetCode160:相交链表 本文介绍了一种高效寻找两个无环单链表相交节点的方法,采用双指针遍历算法。核心思想是通过让两个指针分别遍历两个链表并在到达末尾时切换到对方链表头部,最终在相交节点相遇或同时到达链表末尾(表示不相交)。该方法时间复杂度为O(m+n),空间复杂度为O(1)。文章提供了Java实现代码,并通过示例图解说明了算法的正确性和边界条件处理。 阅读详情

相关推荐

距离多普勒谱(RD谱)绘制方法及理解

RD谱是信号处理领域常用的图形。原始信号往往是一维时域序列,如何将其二维化,并进行变换生成RD谱呢?由于刚刚接触,查阅了网络上、老师手里的资料,发现RD谱的绘制方法并不统一,有些存在一定问题。在此,将心得体会记录下来。

mddh_123的博客 3万+

力扣每日一道系列 --- LeetCode 160. 相交链表

首先计算两个链表的长度,然后判断两个链表的尾节点是否相同。如果不同,那么这两个链表就没有交集,返回空;如果相同,那么就通过计算两个链表的长度差,让长链表先走差距步,然后两个链表一起走,直到它们相遇。✅今日分享就到这里了,如果大家有什么疑问可以在评论区与我讨论,或者直接私信我🤞。

深入解析C/C++编程技巧,带你探索高效开发之路 1720

UNITY3D万人同屏,Dots万人同屏解决方案_类萌宠宠之战

UNITY3D弹幕游戏开发,万人同屏解决方案

6470

力扣160:相交链表

力扣160:相交链表

2501_93048002的博客 1719

Qcom camera hal简介

Qcom camera hal简介

weixin_42136255的博客 7764

图解链表 —— JAVA中的单链表基本操作

文章目录1. 什么是链表2. 链表的种类3. 创建单链表3.1 创建 Node 类(车厢类)3.2 创建 MySingleList (火车类)4. 单链表的基本操作4.1 增加链表元素4.1.1 在链表头部添加元素4.1.2 在链表任意位置添加元素4.1.3 在链表尾部添加元素4.2 删除链表元素4.2.1 删除第一个节点元素4.2.2 删除任意位置 index 元素4.2.3 删除链表中指定元素的第一个节点4.2.4 删除链表的所有指定元素4.3 查找链表元素4.3.1 判断链表中是否包含元素 data4

AlinaQ05的博客 2501

[力扣]160.相交链表

写一个程序,找到两个单链表相交的起始节点 该题目来自力扣题库 示例 在节点 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 (注意,如果两个列表相交...

qq_45619426的博客 245

通俗傻瓜式理清光栅化渲染和光线追踪渲染的原理

用通俗语言傻瓜式的讲清楚光栅渲染和光线追踪渲染的原理,方便没有相关理论基础的朋友理解入门。

qq_37366618的博客 2万+

【LeetCode_160】相交链表

LeetCode第160题【相交链表】的C++解法

有梦想的电信狗 1415

UE5.4像素流送实战:GPU驱动、WebRTC与系统级调优全解析

像素流送是将实时3D渲染画面通过WebRTC编码推流至浏览器的关键技术,其本质是GPU硬件编码(如NVENC)与低延迟网络传输(UDP+BBR)的深度协同。理解其原理需跨越图形API(Vulkan/DX12)、实时音视频(H.264/H.265)、WebRTC信令与NAT穿透四大技术层。技术价值在于突破终端算力限制,支撑远程工业仿真、云VR看房等高交互场景;但落地难点集中于基础设施层——如NVIDIA驱动与UE5.4.3的CUDA Toolkit 12.2兼容性、Linux内核TCP/UDP参数调优、GPU

weixin_32943857的博客 615

【DDSCAT——离散偶极近似仿真程序04】参数理解和模型设计

在这一部分,我们开始理解DDSCAT程序设计中的一些参数问题。 承接第二部分内容中的ddscat.par文件,我们来聊一聊偶极子、实际体积、有效半径等关键词。 一、偶极子点阵 手册中说,我们需要设计模型(target/目标),它是有偶极子点阵组成的。偶极子,顾名思义,是由一对电荷组成的,但我们不用设计一对,我们设计一个点就行,...

XD_Yangf的博客 7552

Leetcode 160. 相交链表

题目要求找出两个单链表的相交节点,若不存在则返回null。通过双指针法,可以高效解决该问题。具体思路是:两个指针分别从链表A和链表B的头节点开始遍历,当其中一个指针到达链表末尾时,将其指向另一个链表的头节点继续遍历。如果两个链表相交,两个指针最终会在相交节点相遇;如果不相交,两个指针会同时到达链表末尾(null)。该方法时间复杂度为O(m+n),空间复杂度为O(1)。需要注意的是,链表中值相同的节点并不一定是同一个节点,判断相交节点时应比较节点本身而非节点的值。

2301_78330892的博客 1701

团体程序设计天梯赛竞赛题--登顶题【L3-039 攀岩】

登顶级 3 道题,每道题 30 分,满分为 90 分。

Pretty Boy Fox的博客 653

《LeetCode力扣练习》第160题 相交链表 Java

《LeetCode力扣练习》第160题 相交链表 Java 一、资源 题目: 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意,函数返回结果后,链表必须 保持其原始结构 。 自定义评测: 评测系统 的输入如下(你设计的程序 不适用 此输入): intersectVal - 相交的起始节点的值。如果不存在相交节点,这一值为

XRT_knives的博客 404

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【leetcode】160.相交链表

刷题小记

2402_83244812的博客 2083

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【LeetCode系列】160. 相交链表

本篇文章将介绍关于数据结构之链表的OJ题,来自力扣:160. 相交链表 题解,展示代码语言暂时为:Java语言。(后续会更新C++代码)

未见花闻的博客 966

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【LeetCode】—— 相交链表LeetCode160题

题目描述 编写一个程序,找到两个单链表相交的起始节点。 如下面的两个链表: 在节点 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 (...

chenxiyuehh的博客 806

leetcode 160.相交链表

leetcode 160.相交链表 题目描述: 编写一个程序,找到两个单链表相交的起始节点。 如下面的两个链表: 在节点 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 ...

EngineerHe的博客 1659

160. 相交链表 - 力扣(LeetCode)

输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,6,1,8,4,5], skipA = 2, skipB = 3。输入:intersectVal = 2, listA = [1,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,6,1,8,4,5]。解释:相交节点的值为 2 (注意,如果两个链表相交则不能为 0)。

q1111111da的博客 2154

LeetCode每日一练 —— 160. 相交链表

leetcode 160. 相交链表

Edison's 小宇宙 1万+

【LeetCode】160. 相交链表—力扣

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

qq_51581716的博客 301

力扣(LeetCode)160. 相交链表

编写一个程序,找到两个单链表相交的起始节点。 如下面的两个链表: 在节点 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 (注意,如...

Pwnpanda的博客 643

160. 相交链表、Leetcode的Python实现

输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,6,1,8,4,5], skipA = 2, skipB = 3。输入:intersectVal = 2, listA = [1,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,6,1,8,4,5]。解释:相交节点的值为 2 (注意,如果两个链表相交则不能为 0)。

分享包括但不限于计算机基础知识、数据结构与算法、Golang技术栈。年与时驰,意与日去,遂成枯落,多不接世,悲守穷庐,将复何及! 625

LeetCode 160.相交链表

LeetCode 160.相交链表 题目: 思路: 1.可以看出这是两个链表尾部a2和b3的next连接到了同一个地址c1,形成交点。 2.那么我们可以先在两个链表分别定义一个指针tailA,tailB,从头开始遍历到尾,通过判断他们遍历后的尾部地址是否相同来看有没有相交。 3.并且从头开始遍历时定义一个记录步数的变量lenA,lenB,之后有用处。 4.确定相交后,我们再分别定义一个指针shortList,longList,也是从头开始走,并且通过之前记录步数的变量来确定哪一个链表更长,让更长的链表先

m0_63816268的博客 604
上一篇: Leetcode202. 快乐数
下一篇: Leetcode168. Excel表列名称
UestcXiye
博客等级 码龄8年 9028粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值