当前位置: 首页 > news >正文

【数据结构OJ题】相交链表

原题链接:https://leetcode.cn/problems/intersection-of-two-linked-lists/description/

目录

1. 题目描述

2. 思路分析

3. 代码实现


1. 题目描述

 

2. 思路分析

看到这道题,很容易想到的方法就是暴力求解,就是将一个链表的每个结点的地址分别和另外一个链表的每个结点的地址进行比较,如果有相等的,就说明相交了。(注意这里不能比值,因为两个不同的结点值有可能一样)。但是这样的时间复杂度太高了,为O(N^2)。

这道题有一个很好的做法:

先计算出两个链表的长度,让长的链表先走相差的长度,然后两个链表同时走,直到遇到相同的结点,即为第一个公共结点

我们定义了四个变量curA,curB,lenA,lenB。

我们用结构体指针curA遍历链表A,用结构体指针curB遍历链表B

lenA表示链表A的长度lenB表示链表B的长度

用while循环通过遍历分别得到了链表A和B的长度。

我们判断尾结点是否相等,如果尾结点相等,说明两个链表一定相交!!!

(我们看下图,如果两个链表相交,那么从这个相交的结点(包括这个交点)之后的结点,在两个链表中都是相等的。所以尾结点相等,说明两个链表一定相交。)

如果两个链表不相交curA!=curB),我们直接返回空指针NULL

如果两个链表相交,我们先让长的链表走两个链表长度的差距步(gap)。因为不知道两个链表哪个长,所以我们使用了abs()函数,差距步gap就是abs(lenA-lenB)。

之后我们又引入了两个结构体指针longListshortList分别指向长链表短链表的头。这里用了if语句判断先假设某个链表是长链表,如果不是,就让它等于短链表

然后我们用一个while循环让长链表走差距步while(gap--))。

然后让longList和shortList这两个结构体指针同时走找交点,找到交点时结束循环。

最后返回longList即可。

3. 代码实现

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {struct ListNode *curA=headA,*curB=headB;int lenA=1,lenB=1;//计算链表长度while(curA->next){curA=curA->next;  ++lenA;}while(curB->next){curB=curB->next;++lenB;}//不相交if(curA!=curB)return NULL;int gap=abs(lenA-lenB);struct ListNode *longList=headA,*shortList=headB;if(lenA<lenB){longList=headB;shortList=headA;}//长的先走差距步while(gap--){longList=longList->next;}//同时走找交点while(longList!=shortList){longList=longList->next;shortList=shortList->next;}return longList;
}

 

相关文章:

【数据结构OJ题】相交链表

原题链接&#xff1a;https://leetcode.cn/problems/intersection-of-two-linked-lists/description/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 看到这道题&#xff0c;很容易想到的方法就是暴力求解&#xff0c;就是将一个链表的每个结点的地址…...

【华为OD机试】最小传输时延I【2023 B卷|200分】

【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 某通信网络中有N个网络结点,用1到N进行标识。网络通过一个有向无环图表示, 其中图的边的值表示结点之间的消息传递时延。 现给定相连节点之间的时延列表times[i]={u,v,w},其中u表示…...

Android13 网络 Adb 默认开启

Android 13 网络 Adb 默认开启 文章目录 Android 13 网络 Adb 默认开启一、前言二、默认adb 代码实现1、修改的目录&#xff1a;2、具体修改&#xff1a;&#xff08;1&#xff09;在XXX_device.mk 添加属性&#xff08;2&#xff09;设置固定端口号&#xff08;3&#xff09;去…...

Git分享-规范/建议/技巧

1. Git多人协作开发流程图 1.1 processOn默认的模板 1.2 改造之后 https://www.processon.com/view/link/64ccaf56a433c931b2f9428a 访问密码&#xff1a;512I ① 总流程图 ② feat分支&#xff08;功能/需求 分支&#xff09;流程 ③ bugfix分支&#xff08;紧急补丁分支&…...

vue3文件下载功能

定义方法&#xff1a; utils.js /**** param url 目标下载接口* param query 查询参数* param fileName 文件名称* returns {*}*/ export function downBlobFile(url: any, query: any, fileName: string) {return request({//url: url,method: get,responseType: blob,param…...

Python调用文心一言的API

最近申请了文心一言的key&#xff0c;然后尝试调用了一下文心一言&#xff0c;这里使用一个简单的方式来调用文心一言&#xff1a; pip install paddle-pipelinesfrom pipelines.nodes import ErnieBotapi_key "your apply key" secret_key "your apply secr…...

【计算机网络八股】计算机网络(一)

目录 计算机网络的各层协议及作用&#xff1f;TCP和UDP的区别&#xff1f;UDP 和 TCP 对应的应用场景是什么&#xff1f;详细介绍一下 TCP 的三次握手机制&#xff1f;为什么需要三次握手&#xff0c;而不是两次&#xff1f;为什么要三次握手&#xff0c;而不是四次&#xff1f…...

记录一次arcgis engine开发版本引入问题

之前基于arcigs 10.1vs2013开发的程序&#xff0c;现在拿出来要改&#xff0c;但是目前版本是arcgis10.7vs2017/vs2019,打开后无论如何替换引用版本&#xff0c;都报错 &#xff08;具体版本对应可以看这&#xff1a;ArcGIS Engine 与 Visual Studio 版本对照表_vs2019对应啥版…...

2023年Java毕业设计怎样选题,有哪些注意事项,300道Java毕业设计题目

文章目录 一、确定个人兴趣和技能二、考虑实际应用价值三、注重创新和独特性四、合理规划时间和资源五、注重实践和测试Java 毕业设计题目参考第一部分第二部分 小结 随着计算机技术的不断发展&#xff0c;Java编程语言已经成为了众多大学计算机专业学生必修的一门课程。而Java…...

算法-滑动窗口-串联所有单词的子串

算法-滑动窗口-串联所有单词的子串 1 题目概述 1.1 题目出处 https://leetcode.cn/problems/substring-with-concatenation-of-all-words/ 1.2 题目描述 2 滑动窗口Hash表 2.1 解题思路 构建一个大小为串联子串的总长的滑动窗口为每个words中的子串创建一个hash表, <子…...

2023年7月京东美妆护肤品小样行业数据分析(京东数据挖掘)

如今&#xff0c;消费者更加谨慎&#xff0c;消费决策也更加理性。在这一消费环境下&#xff0c;美妆护肤市场中&#xff0c;面对动辄几百上千的化妆品&#xff0c;小样或体验装无疑能够降低消费者的试错成本。由此&#xff0c;这门生意也一直备受关注。 并且&#xff0c;小样…...

记录Taro巨坑,找不到sass类型定义文件

问题 taronutuisassts项目里tsconfig.json一直报红报错。 找不到“sass”的类型定义文件。 程序包含该文件是因为: 隐式类型库 “sass” 的入口点 其实正常人想的肯定是装上 types/sass试试。开始我试过了&#xff0c;没用。删了依赖重装也没用。后面在issue中找到答案了 解决…...

CS1988|C#无法在异步方法中使用ref,in,out类型的参数的问题

CS1988|C#无法在异步方法中使用ref,in,out类型的参数 &#x1f300;|场景&#xff1a; BlazorServer的场景中推荐使用异步方法&#xff0c;使用ref,out,in为参数前缀则报错CS1988 原因如下: ref parameters are not supported in async methods because the method may not h…...

ubuntu开机失败——ACPI Error

开机循环进入GNU GRUB 或者 黑屏 1.acpioff 解决办法 1&#xff09;先用下面方法进入系统 2&#xff09;更改grub ref 开机循环进入GNU GRUB 或者 黑屏 有提示ACPI Error错误如图&#xff1a; 解决办法 1&#xff09;先用下面方法进入系统 在GUN GRUB界面&#xff0c;选择ubun…...

搭建开发环境-操作系统篇(一键搭建开发环境)

概述 所谓工欲善其事必先利其器&#xff0c;搭环境往往是开发过程中卡出很多初学者的拦路虎。 对于很多老鸟来说&#xff0c;很多东西都已经习惯成自然&#xff0c;也就没有刻意和初学者说。但对于很多初学者&#xff0c;却是受益良多。 这个系列&#xff0c;先从操作系统开始…...

人工智能AI绘画接入使用文档

人工智能AI绘画接入使用 一、人工智能AI绘画二、使用步骤1、接口2、请求参数3、请求参数示例4、接口 返回示例 三、 AI绘画优秀描述例子四、 如何获取appKey和uid1、申请appKey:2、获取appKey和uid 五、重要说明六、AI绘画成果展示 一、人工智能AI绘画 AI作画,用户可以在平台上…...

如何使用PyQt进行文件操作

PyQt是一个非常强大的Python GUI库&#xff0c;它可以帮助我们创建漂亮的跨平台应用程序。不过&#xff0c;在你开始使用PyQt进行文件操作之前&#xff0c;我想提醒你&#xff0c;这并不是在操作文件系统&#xff0c;而是在操作文件和文件夹。 首先&#xff0c;我们要导入PyQt…...

阿里云CDN加速器基本概念与购买开通

文章目录 1.CDN加速器的基本概念1.1.CDN加速器基本介绍1.2.网站引入CDN加速器的架构图1.3.CDN加速器的工作原理1.4.引入CDN后域名解析变成了CNAME&#xff1f; 2.开通阿里云CDN加速服务 1.CDN加速器的基本概念 CDN加速器官方文档&#xff1a;https://help.aliyun.com/product/…...

2023河南萌新联赛第(六)场:河南理工大学-F 爱睡大觉的小C

2023河南萌新联赛第&#xff08;六&#xff09;场&#xff1a;河南理工大学-F 爱睡大觉的小C https://ac.nowcoder.com/acm/contest/63602/F 文章目录 2023河南萌新联赛第&#xff08;六&#xff09;场&#xff1a;河南理工大学-F 爱睡大觉的小C题意解题思路 题意 新学期的概…...

[C++ 网络协议编程] 域名及网络地址

1. DNS服务器 DNS&#xff08;Domain Name System&#xff09;&#xff1a;是对IP地址和域名&#xff08;如:www.baidu.com等&#xff09;进行相互转换的系统&#xff0c;其核心是DNS服务器。 我们输入的www.baidu.com是域名&#xff0c;是一种虚拟地址&#xff0c;而非实际地…...

新手也能上手!冠绝行业的AI论文写作软件 —— 千笔·专业论文写作工具

你是否曾在论文写作中感到无从下手&#xff1f;选题纠结、框架混乱、文献检索困难、查重率高得让人焦虑……这些困扰&#xff0c;是否让你夜不能寐&#xff1f;面对繁杂的学术任务&#xff0c;很多同学都感到力不从心。而如今&#xff0c;一款专为学生打造的AI论文写作工具——…...

CSDN格式 - 人工智能专业毕设和论文为什么难?无需代码也能讲明白

人工智能专业毕设/论文难在哪&#xff1f;无代码视角深度解析一、引言对于人工智能专业的学生而言&#xff0c;毕业设计与毕业论文往往被称为“大学最难关卡”。很多同学即便具备一定编码能力&#xff0c;依旧在毕设中举步维艰&#xff1b;甚至有不少人认为“AI毕设写代码”&am…...

StructBERT WebUI入门必看:QUICKSTART.md核心命令速查表提炼与实操验证

StructBERT WebUI入门必看&#xff1a;QUICKSTART.md核心命令速查表提炼与实操验证 1. 开篇&#xff1a;为什么需要这个工具&#xff1f; 你是不是经常遇到这样的情况&#xff1a; 想知道两段文字是不是表达同一个意思需要从大量文本中找出重复内容想要匹配用户问题和标准答…...

从部署到应用:LingBot-Depth完整项目实战,打造你的第一个3D感知工具

从部署到应用&#xff1a;LingBot-Depth完整项目实战&#xff0c;打造你的第一个3D感知工具 1. 项目开篇&#xff1a;为什么你需要一个自己的3D感知工具 想象一下&#xff0c;你手头有一个普通的RGB摄像头&#xff0c;或者一个精度不太够的深度传感器。你想用它来做个机器人避…...

7天精通llama-cpp-python:从环境配置到生产部署的实战指南

7天精通llama-cpp-python&#xff1a;从环境配置到生产部署的实战指南 【免费下载链接】llama-cpp-python Python bindings for llama.cpp 项目地址: https://gitcode.com/gh_mirrors/ll/llama-cpp-python llama-cpp-python作为llama.cpp的Python绑定库&#xff0c;为开…...

Windows安卓运行难题如何破解?轻量级解决方案让APK直装效率提升80%

Windows安卓运行难题如何破解&#xff1f;轻量级解决方案让APK直装效率提升80% 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 在Windows系统上运行安卓应用一直是开发…...

问题解决方法:keil软件用st-link烧录代码报错

问题&#xff1a;今天用st-link烧录代码报错说芯片和识别的芯片不一样&#xff1f;难道是盗版&#xff1f;解决方法&#xff1a;把这个使能引脚取消就可以成功烧录了...

DLSS Swapper:3分钟提升游戏帧率的开源版本管理解决方案

DLSS Swapper&#xff1a;3分钟提升游戏帧率的开源版本管理解决方案 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 当你在《赛博朋克2077》的夜之城飞驰时&#xff0c;是否因DLSS版本过旧导致画面模糊&#xff1f;当新…...

小白友好!Hunyuan-MT-7B快速部署教程:无需代码基础,轻松搭建

小白友好&#xff01;Hunyuan-MT-7B快速部署教程&#xff1a;无需代码基础&#xff0c;轻松搭建 你是不是也遇到过这样的烦恼&#xff1f;看到一篇精彩的英文技术文章&#xff0c;想分享给团队&#xff0c;却苦于翻译质量参差不齐&#xff0c;要么生硬别扭&#xff0c;要么丢失…...

Arduino UNO R3 + 继电器控制风扇:从硬件连接到代码调试的完整指南

Arduino UNO R3 继电器控制风扇&#xff1a;从硬件连接到代码调试的完整指南 在智能家居和自动化控制领域&#xff0c;Arduino因其简单易用、成本低廉而成为众多创客和电子爱好者的首选。本文将带您完成一个实用又有趣的项目——使用Arduino UNO R3通过继电器控制风扇的开关。…...