力扣OJ题——相交链表

题目:160. 相交链表

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

思路一(暴力求解):

A链表的每个节点依次跟B链表中节点进行比较,如果有相等就是相交,第一个相等就是交点

接下来我们看一下思路一的时间复杂度吧~

因为我们这里不知道这两个链表之间的大小关系,

所以时间复杂度可以是O(N^2)或者O(N*M)

思路二:

1.先找尾节点,尾节点的地址相同就相交,不相同直接返回NULL

2.接下来要处理的就是判断相交链表的第一个节点,我们先计算两个链表的长度,让长的链表先走完长度差,再同时找交点,第一个地址相同的就是交点

接下来我们看一下思路二的时间复杂度

这里算了一下是3N,所以时间复杂度就应该是O(N),显然要优于思路一

所以接下来我们来实现一下思路二~

首先第一步:先找尾节点,尾节点的地址相同就相交,不相同直接返回NULL

代码如下:

    struct ListNode* curA = headA;
    struct ListNode* curB = headB;
   
    while(curA->next)
     {
        curA = curA->next;
    }
    
    while(curB->next) 
    {
        curB = curB->next;
    }


    if(curA!=curB)  return NULL;//尾节点不相等,说明不相交,直接返回NULL

接下来第二步:

a.分别算出两个链表的长度,进而算出二者的长度差值

b.让长的链表先走完长度差

c.  两个链表同时走,直到遇到相同的节点

代码如下:

    curA = headA;
    curB = headB;
    int lenA = 0, lenB = 0;//分别算出两个链表的长度
    while(curA)
     {
        lenA++;
        curA = curA->next;
    }
    
    while(curB) 
    {
        lenB++;
        curB = curB->next;
    }
    
    int len = abs(lenA-lenB);//len为二者的长度差

    struct ListNode* longList = headA;
    struct ListNode* shortList = headB;

    if(lenB>lenA)
     {
        longList = headB;
        shortList = headA;
    }

    //让长的链表先走完长度差
    while(len!=0)
    {
        longList = longList->next;
        len--;
    }
    
    //两个链表同时走,直到遇到相同的节点
    while(longList != shortList)
    {
        longList = longList->next;
        shortList = shortList->next;
    }
    return longList;

将上面两步的代码结合起来,这道题就过了

当然,我们也可以将这个代码写得更简略一些:比如将计算长度的代码融入第一步的遍历

这里因为要逻辑更清晰一些才将它们分开的,不过这些也都是小问题而已啦

好啦,到此为止,今天的相交链表问题就结束啦,如果文中分析,题解代码有不足的地方欢迎大家在评论区讨论和指正

让我们在接下来的时间里一起学习,一起进步吧~

c0fe1378f4b1464abb37998a472b5961.jpg

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

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

相关文章

芯课堂 | 华芯微特系列芯片CAN中断配置

​今天小编给大家带来的是华芯微特全系列芯片如何配置CAN中断模块的详细介绍,包括CAN各自中断以及错误处理方式,大家一起来看看吧。 Part 1:CANRX中断 CAN接受和发送模块各有64位深的FIFO用于缓存,如果像上图一样打开了RX非空中断…

java面试题之redis篇

1.redis 中的数据类型有哪些 随着 Redis 版本的更新,后面又支持了四种数据类型: BitMap(2.2 版新增)、HyperLogLog(2.8 版新增)、GEO(3.2 版新增)、Stream(5.0 版新增&am…

C#||应用框体设计计算器

题目: 设计一个简单计算器 思路: 首先在应用框体中设计自己喜欢的计算器格式,接着编辑其中的函数。抽取一个Call函数用来显示从键盘输入的数字,cleanall()函数进行清屏操作,mode()函数进行四…

Android EditText关于imeOptions的设置和响应

日常开发中,最绕不开的一个控件就是EditText,随之避免不了的则是对其软键盘事件的监听,随着需求的不同对用户输入的软键盘要求也不同,有的场景需要用户输入完毕后,有一个确认按钮,有的场景需要的是回车&…

ChatGPT如何提供实用且高质量的建议和指导,提高编程效率和准确性

ChatGPT4.0的功能包括: 无限制ChatGPT模型使用 GPT-4模型使用 GPT-4图像分析功能 GPT-4联网功能 GPT-4高级数据分析功能 GPT-4高级插件功能 DALLE-3高级AI绘图功能 如何能高效地处理文本、文献查阅、PPT编辑、编程、绘图和论文写作已经成为您成功的关键。而 …

代码随想录算法训练营第二十三天|669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

669. 修剪二叉搜索树 刷题https://leetcode.cn/problems/trim-a-binary-search-tree/description/文章讲解https://programmercarl.com/0669.%E4%BF%AE%E5%89%AA%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91.html视频讲解https://www.bilibili.com/video/BV17P41177ud/?sh…

【Java EE初阶十五】网络编程TCP/IP协议(二)

1. 关于TCP 1.1 TCP 的socket api tcp的socket api和U大片的socket api差异很大,但是和前面所讲的文件操作很密切的联系 下面主要讲解两个关键的类: 1、ServerSocket:给服务器使用的类,使用这个类来绑定端口号 2、Socket&#xf…

【高阶数据结构】B+树

文章目录 1. B树的概念2. B树的查找3. B-树 VS B树4. B 树的插入分析 1. B树的概念 B树是B树的变形,是在B树基础上优化的多路平衡搜索树,B树的规则跟B树基本类似,但是又在B树的基础上做了一些改进优化。 一棵m阶的B树需满足下列条件&#x…

Vue+OpenLayers7入门到实战:OpenLayers加载船讯网航海地图瓦片到地图上

返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7 前言 本章介绍如何使用OpenLayers7在地图上加载船讯网航海地图瓦片到地图上的功能。 适用于海运等海洋相关行业使用。 二、依赖和使用 "ol": "7.5.2"使用npm安装依赖npm install ol@7.5.2使用Yarn安装…

IDEA连接database数据库

文章目录 一、连接数据库1、连接mysql2、连接参数配置3、配置驱动从maven仓库下载:要求联网将提前下载好的jar放到本地目录 4、完成 二、执行sql1、选择要操作的数据库2、执行sql 三、问题1、可能因为时区问题连接不上 一、连接数据库 1、连接mysql 2、连接参数配置…

为什么从没有负值的数据中绘制的小提琴图(Violin Plot)会出现负值部分?

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 小提琴图(Violin Plot) 是一种用于展示和比较数据分布的可视化工具。它结合了箱形图(Box Plot)和密度图(Kernel Density Plot)的特…

1、OI 赛事与赛制

赛事简介 信息学奥林匹克竞赛(英语:Olympiad in Informatics,简称:OI)是一门在中学生中广泛开展的学科竞赛,和物理、数学等竞赛性质相同。OI 考察的内容是参赛者运用算法、数据结构和数学知识,通过编写计算机程序解决实际问题的能力。 OI 竞赛种类繁多,仅中国就包括: …

C++基础学习

string char转string vector转string 正则匹配

【LeetCode每日一题】单调栈 581. 最短无序连续子数组

581. 最短无序连续子数组 给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。 请你找出符合题意的 最短 子数组,并输出它的长度。 示例 1: 输入&am…

地下管线管网三维建模工具MagicPipe3D V3.4.2发布

经纬管网建模系统MagicPipe3D,本地离线参数化构建地下管网三维模型(包括管道、接头、附属设施等),输出标准3DTiles服务、Obj模型等格式,支持Cesium、Unreal、Unity、Osg等引擎加载进行三维可视化、语义查询、专题分析&…

2024年数学建模竞赛汇总——时间轴

美赛已过,好多小伙伴表示已经错过,不清楚什么时候报名,什么时候准备,其实每年数学建模比赛有很多个,各大比赛的级别、报名时间、参赛对象等要求什么呢?小编从竞赛说明、竞赛级别、是否允许跨校、报名费用、…

8.2 新特性 - 透明的读写分离

文章目录 前言1. 安装部署1.1 下载安装包1.2 MySQL Shell1.3 配置 MySQL 实例1.4 启动 ReplicaSet1.5 启动 8.2 Router 2. 测试路由总结 前言 MySQL 8.0 官方推出过一个高可用方案 ReplicaSet 主要由 Router、MySQL Shell、MySQL Server 三个组件组成。 MySQL Shell 负责管理…

Swift Combine 使用从 PassthroughSubject 预定好的发送的事件测试订阅者 从入门到精通二十三

Combine 系列 Swift Combine 从入门到精通一Swift Combine 发布者订阅者操作者 从入门到精通二Swift Combine 管道 从入门到精通三Swift Combine 发布者publisher的生命周期 从入门到精通四Swift Combine 操作符operations和Subjects发布者的生命周期 从入门到精通五Swift Com…

第四篇【传奇开心果系列】Python文本和语音相互转换库技术点案例示例:pyttsx3自动化脚本经典案例

传奇开心果短博文系列 系列短博文目录Python文本和语音相互转换库技术点案例示例系列 短博文目录前言一、雏形示例代码二、扩展思路介绍三、批量处理文本示例代码四、自定义语音设置示例代码五、结合其他库和API示例代码六、语音交互系统示例代码七、多语言支持示例代码八、添加…

c#,dotnet, DataMatrix 类型二维码深度识别,OCR,(基于 Halcon)

代码中部分调用的 c 函数参数,具体说明自行研究~(我也是参考的其他资源,还没研究透彻) 例如:HOperatorSet.GenRectangle2() , 2000, 2000, 0, 2000, 2000 这些数字应该是选取的图片解析范围、尺寸&#xff…