力扣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.mzph.cn/news/690913.shtml

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

相关文章

stm32 DCMI的知识点

1.DCMI的简介 DCMI全称Digital camera interface(数字摄像头接口),是一种可以采集摄像头数据的一种接口。此接口适用于黑白摄像头、X24 和 X5 摄像头,并可以假定所有预处理(如调整大小)都可以在该摄像头模…

【动态规划专栏】专题一:斐波那契数列模型--------1.第N个泰波那契数

本专栏内容为:算法学习专栏,分为优选算法专栏,贪心算法专栏,动态规划专栏以及递归,搜索与回溯算法专栏四部分。 通过本专栏的深入学习,你可以了解并掌握算法。 💓博主csdn个人主页:小…

【Go语言】Go语言的数据类型

GO 语言的数据类型 Go 语言内置对以下这些基本数据类型的支持: 布尔类型:bool 整型:int8、byte、int16、int、uint、uintptr 等 浮点类型:float32、float64 复数类型:complex64、complex128 字符串:st…

层级关联,审批人功能

一个需求要求选择一级&#xff0c;下方展示一级的效果 后端给了审批人数据&#xff0c;但是数据需要单独处理 <template><div class"box"><el-form :model"ruleForm" :rules"rules" ref"ruleForm" label-width"…

MySQL多实例部署:从概念到实操的全面指南

目录 MySQL多实例管理 单实例 什么是多实例 多实例的好处 多实例的弊端 MySQL多实例用在哪些场景 资金紧张的公司 用户并发访问量不大的业务 大型网站也有用多实例 部署MySQL多实例 rpm和源码的优缺点 二进制方式安装mysql 准备二进制mysql运行所需的环境 准备多…

Android---Retrofit实现网络请求:Java 版

简介 在 Android 开发中&#xff0c;网络请求是一个极为关键的部分。Retrofit 作为一个强大的网络请求库&#xff0c;能够简化开发流程&#xff0c;提供高效的网络请求能力。 Retrofit 是一个建立在 OkHttp 基础之上的网络请求库&#xff0c;能够将我们定义的 Java 接口转化为…

IO线程进程

代码练习 使用fread和fwrite完成两个文件的拷贝 #include<myhead.h>int main(int argc, const char *argv[]) {FILE *fp NULL;//重新以只读的形式打开文件if((fp fopen("./OIP-C.bmp", "r")) NULL){perror("fopen error");return -1;…

SICTF round#3 web

1.100&#xff05;_upload url可以进行文件包含&#xff0c;但是flag被过滤 看一下源码 <?phpif(isset($_FILES[upfile])){$uploaddir uploads/;$uploadfile $uploaddir . basename($_FILES[upfile][name]);$ext pathinfo($_FILES[upfile][name],PATHINFO_EXTENSION);$t…

FL Studio21中文版本混音功能介绍

FL Studio 21的混音功能是其音乐制作能力中不可或缺的一部分&#xff0c;它为用户提供了强大的工具&#xff0c;以便他们可以对音轨进行细致的调整&#xff0c;确保音乐作品的最终呈现效果达到最佳。 FL Studio 21 Win-安装包下载如下: https://wm.makeding.com/iclk/?zonei…

基于Java的家政预约管理平台

功能介绍 平台采用B/S结构&#xff0c;后端采用主流的Springboot框架进行开发&#xff0c;前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 前台功能包括&#xff1a;首页、家政详情、家政入驻、用户中心模块。后台功能包括&#xff1a;家政管理、分类管理…

数字化转型导师坚鹏:政府数字化转型之数字化技术

政府数字化转型之数字化技术 ——物联网、云计算、大数据、人工智能、虚拟现实、区块链、数字孪生、元宇宙等综合解析及应用 课程背景&#xff1a; 数字化背景下&#xff0c;很多政府存在以下问题&#xff1a; 不清楚新技术的发展现状&#xff1f; 不清楚新技术的重要应…

macOS开启HiDPI外接2K显示器(解决字体发虚问题)

1.前言&#xff1a; 购置了一台2K显示器&#xff0c;但通过HDMI直接连接时的显示效果让人难以接受&#xff0c;因此我们需要启用苹果系统的HiDPI模式&#xff0c;以实现更完美的显示效果。 那么&#xff0c;为什么要启用HiDPI模式呢&#xff1f;2K显示器的分辨率为2560*1440&…

IDEA连接database数据库

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

【AI数字人-论文】AD-NeRF论文

文章目录 NeRFAD-NeRF模型NeRF体渲染个体NeRF表示背景和姿态编辑 loss 参考 NeRF 将一个连续的场景表示为一个输入为5D向量的函数&#xff0c;这个函数为NeRF函数&#xff0c;它的输入由一个空间点的3D位置 x ( x , y , z ) \mathbf{x} \left( x, y, z \right) x(x,y,z)和它…

Android S - 添加按键,上报键值为0

仅作记录 展锐8581模块 device/sprd/mpool/module/keylayout/gpio-keys.kl#仿照下面的形式&#xff0c;新增一行 key 68 F10 WAKE key 114 VOLUME_DOWN WAKE key 115 VOLUME_UP WAKE key 116 POWER WAKE key 212 CAM…

【前端素材】几款实用的后台管理系统html模板(附带源码)

一、需求分析 后台管理系统是一种用于管理网站、应用程序或系统的工具&#xff0c;它通常作为一个独立的后台界面存在&#xff0c;供管理员或特定用户使用。下面详细分析后台管理系统的定义和功能&#xff1a; 1. 定义 后台管理系统是一个用于管理和控制网站、应用程序或系统…

湖南建研工程质量检测系统/Scripts/admintool文件上传漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

了解c++智能指针的使用案例和场景

c智能指针是一种封装了原始指针的类对象&#xff0c;可以实现自动管理内存的功能&#xff0c;避免手动new和delete造成的内存泄漏或重复释放等问题。 c智能指针有三种类型&#xff0c;分别是&#xff1a; std::unique_ptr&#xff1a;独占式智能指针&#xff0c;表示对内存的唯…

YAPI接口自动鉴权功能部署详解

安装准备 以下操作&#xff0c;默认要求自己部署过yapi&#xff0c;最好是部署过yapi二次开发环境。 无论是选择在线安装或者是本地安装&#xff0c;都需要安装client工具。 1、yapi-cli&#xff1a;npm install yapi-cli –g&#xff0c; 2、安装后将文件夹nodejs/node_gl…

Chapter 8 - 16. Congestion Management in TCP Storage Networks

Active Queue Management As previously mentioned, dropping or marking schemes for packets that are waiting in a queue can significantly influence TCP’s behavior on the end devices. These schemes are called Active Queue Management (AQM). 如前所述,针对在队…