力扣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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql数据库主从集群从库Slave因为RelayLog过多过大引起服务器硬盘爆满生产事故实战解决

Mysql数据库主从集群从库slave因为RelayLog过多过大引起从库服务器硬盘爆满生产事故实战解决 一、MySQL数据库主从集群概念 MySQL数据库主从集群是一种高可用性和读写分离的数据库架构,它基于MySQL的复制(Replication)技术来同步数据。在主…

智慧之眼:数据可视化引领智慧交通革新

在日新月异的科技时代,数据可视化正以惊人的力量助力智慧交通的蓬勃发展。借助数据可视化,我们不仅能够更全面地了解交通状况,还能够在城市交通中实现更加智慧、高效的运行。下面我就以可视化从业者的角度,来简单聊聊这个话题。 首…

Panalog大数据日志审计系统libres_syn_delete.php存在命令执行漏洞

文章目录 前言声明一、Panalog大数据日志审计系统简介二、漏洞描述三、影响版本四、漏洞复现五、整改意见 前言 Panalog大数据日志审计系统定位于将大数据产品应用于高校、 公安、 政企、 医疗、 金融、 能源等行业之中,针对网络流量的信息进行日志留存&#xff0c…

Acunetix23.7安装(含踩坑内容)

之前的web漏扫工具Acunetix版本还是停留再15.x版本,目前awvs已经更新值24.x版本了,所谓磨刀不误砍柴工,工具必须更新一波,废话不多说直接干 历史版本可删除 第一步与低版本不同host文件添加如下内容C:\Windows\System32\drivers…

Unity3d Mesh篇(一)— 创建简单三角面

文章目录 前言一、Mesh组成二、使用步骤三、效果四、总结 前言 Mesh(网格)是一种常用的3D图形表示方法,它由顶点,法线,UV 坐标,和三角形等组成。您可以使用 Mesh 类的方法来创建或修改网格,也可…

threejs 3D标注

import { CSS3DObject } from "three/examples/jsm/renderers/CSS3DRenderer";gltfLoader.load("./model/exhibit2.glb", (gltf) >{let array ["雕像", "中药房", "浸制区", "道地沙盘","动物标本区&quo…

Java——Stream流的学习

在开发过程中&#xff0c;经常或忽略流的使用&#xff0c;导致用的不熟练&#xff0c;于是抽时间系统的学习下stream的使用&#xff0c;找了哔哩哔哩的教程跟着看看练练。 准备工作 创建Book、Aurhor实体类&#xff0c;初始化数据 public static List<Author> getAuth…

【Linux | C++ 】基于环形队列的多生产者多消费者模型(Linux系统下C++ 代码模拟实现)

阅读导航 引言一、生产者消费者模型二、环形队列简介三、基于环形队列的生产者消费者模型&#xff08;C 代码模拟实现&#xff09;⭕Makefile文件⭕ . h 头文件✅sem.hpp✅ringQueue.hpp ⭕ . cpp 文件✅testMain.cpp 温馨提示 引言 在上一篇文章中&#xff0c;我们深入探讨了…

如何在CentOS安装SQL Server数据库并实现无公网ip环境远程连接

文章目录 前言1. 安装sql server2. 局域网测试连接3. 安装cpolar内网穿透4. 将sqlserver映射到公网5. 公网远程连接6.固定连接公网地址7.使用固定公网地址连接 前言 简单几步实现在Linux centos环境下安装部署sql server数据库&#xff0c;并结合cpolar内网穿透工具&#xff0…

异常统一处理:HttpRequestMethodNotSupportedException(Http请求方法不支持异常)

一、引言 本篇内容是“异常统一处理”系列文章的重要组成部分&#xff0c;主要聚焦于对 HttpRequestMethodNotSupportedException 的原理解析与异常处理机制&#xff0c;并给出测试案例。 关于 全局异常统一处理 的原理和完整实现逻辑&#xff0c;请参考文章&#xff1a; 《Sp…

STM32 USART详细解读(理论知识)

文章目录 前言一、同步传输和异步传输二、UART协议三、UART硬件结构1.波特率&#xff0c;数据位&#xff0c;校验位&#xff0c;停止位设置2.数据发送流程3.数据接收流程4.中断控制 总结 前言 本篇文章来给大家讲解一下STM32中的USART&#xff0c;USART是STM32中非常重要的一个…

Vscode vim 插件使用Ctrl+C和V进行复制粘贴到剪切板

Vscode vim 插件使用CtrlC和V进行复制粘贴到剪切板 使用这一个插件的时候复制粘贴和其他软件互动的时候体验不好, 并且不可以用Ctrl c, Ctrl v很不爽 "vim.commandLineModeKeyBindings": [{"before" : ["Ctrl", "c"],"after&q…