算法与数据结构(相交链表)
题目
思路
1.哈希集合
因为要求是否存在相交节点,那么我们就可以利用哈希集合先将listA链表里面的所有数据存入,然后访问listB,判断其是否有节点在哈希集合中,若存在,则说明此节点为相交的节点。若遍历完之后仍没有发现,则说明两个表之间不存在相交节点,返回nullptr即可。
2.双指针
首先进行条件判断,若headA和headB中有一个为空,则说明不可能有相交节点,直接返回nullptr即可。
接着用cur1和cur2变量用来遍历listA和listB链表,循环中用了三元运算符,就第一个来说,若cur1为空,则直接将cur1赋值为headB,若不为空,则继续往下移动。
第二个也是如此,那为什么这样就可以求出它们的相交节点呢?
假设链表 headA 的长度为 m,链表 headB 的长度为 n,且它们的交点之后的公共部分长度为 k。
-
当
cur1遍历完headA后,它会开始遍历headB,此时cur1已经走了m步。 -
当
cur2遍历完headB后,它会开始遍历headA,此时cur2已经走了n步。 -
当
cur1和cur2都开始遍历对方的链表时,它们会在交点处相遇,因为此时cur1和cur2都走了m + n - k步。
如果两个链表没有交点,那么 cur1 和 cur2 最终都会指向 nullptr,此时返回 nullptr。
下面举个例子来看就容易理解了
listA: A1 -> A2 -> A3 -> C1 -> C2 -> C3
listB: B1 -> B2 -> C1 -> C2 -> C3
-
链表 listA 的长度为
m = 6。 -
链表 listB 的长度为
n = 5。 -
交点之后的公共部分长度为
k = 3(即C1 -> C2 -> C3)。
运行过程:
-
初始化指针:
-
cur1指向A1。 -
cur2指向B1。
-
-
遍历过程:
-
cur1依次遍历:A1 -> A2 -> A3 -> C1 -> C2 -> C3 -> nullptr。 -
当
cur1到达nullptr时,它已经走了m = 6步,然后切换到 listB,继续遍历:B1 -> B2 -> C1。 -
cur2依次遍历:B1 -> B2 -> C1 -> C2 -> C3 -> nullptr。 -
当
cur2到达nullptr时,它已经走了n = 5步,然后切换到 listA ,继续遍历:A1 -> A2 -> A3 -> C1。
-
-
相遇点:
-
当
cur1切换到 listB 后,它走了m + n - k = 6 + 5 - 3 = 8步。 -
当
cur2切换到 listA 后,它走了n + m - k = 5 + 6 - 3 = 8步。 -
两者会在交点
C1处相遇。
-
代码
1.哈希集合
class Solution {
public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {unordered_set<ListNode*> s;while(headA){s.insert(headA);headA = headA->next;}while(headB){if(s.count(headB)){return headB;}headB = headB->next;}return nullptr;}
};
2.双指针
class Solution {
public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {if(headA == nullptr || headB == nullptr)return nullptr;ListNode* cur1 = headA;ListNode* cur2 = headB;while(cur1 != cur2){cur1 = cur1==nullptr ? headB : cur1->next;cur2 = cur2==nullptr ? headA : cur2->next;}return cur1;}
};
相关文章:
算法与数据结构(相交链表)
题目 思路 1.哈希集合 因为要求是否存在相交节点,那么我们就可以利用哈希集合先将listA链表里面的所有数据存入,然后访问listB,判断其是否有节点在哈希集合中,若存在,则说明此节点为相交的节点。若遍历完之后仍没有发…...
浅入浅出Selenium DevTools
前言 在自动化测试领域,Selenium一直是主流工具之一。随着前端技术的不断发展,浏览器的功能也在不断丰富。 Selenium 3版本前,一套通用的采集流程如上图所示: 打开Charles,设置Session自动导出频次及导出路径Seleniu…...
软件工程---净室软件工程
净室软件工程是一种软件开发方法,旨在通过形式化的数据和严格的测试来提高软件的可靠性和减少缺陷的数量。它的核心思想是在软件开发过程中最小化或消除软件缺陷,从而提高软件的质量和可靠性。这种方法强调在软件生命周期的早期阶段使用形式化方法进行规…...
OpenHarmony图形子系统
OpenHarmony图形子系统 图形子系统主要包括UI组件、布局、动画、字体、输入事件、窗口管理、渲染绘制等模块,构建基于轻量OS应用框架满足硬件资源较小的物联网设备或者构建基于标准OS的应用框架满足富设备的OpenHarmony系统应用开发。 1.1 轻量系统 简介 图形子…...
如何获取Mac OS 安装盘
发现虚拟机VirtualBox支持Mac虚拟,就想尝试一下。但是发现Mac的安装盘特别难拿到,因此留档。发现有几种方法,最简单的方法,是在有Mac 机器的情况下,直接到App Store里,根据Mac版本的名字查找并下载。另外还…...
【弹性计算】弹性裸金属服务器和神龙虚拟化(一):功能特点
弹性裸金属服务器和神龙虚拟化(一):功能特点 特征一:分钟级交付特征二:兼容 VPC、SLB、RDS 等云平台全业务特征三:兼容虚拟机镜像特征四:云盘启动和数据云盘动态热插拔特征五:虚拟机…...
大白话前端性能优化方法的分类与具体实现
大白话前端性能优化方法的分类与具体实现 一、资源加载优化 1. 压缩与合并文件 大白话解释: 咱们的网页代码里,就像一个房间堆满了东西,有很多没用的“杂物”,比如代码里的空格、注释啥的。压缩文件就是把这些“杂物”清理掉&a…...
Rabbit MQ 高频面试题【刷题系列】
文章目录 一、公司生产环境用的什么消息中间件?二、Kafka、ActiveMQ、RabbitMQ、RocketMQ有什么优缺点?三、解耦、异步、削峰是什么?四、消息队列有什么缺点?五、RabbitMQ一般用在什么场景?六、简单说RabbitMQ有哪些角…...
ES6 特性全面解析与应用实践
1、let let 关键字用来声明变量,使用let 声明的变量有几个特点: 1) 不允许重复声明 2) 块儿级作用域 3) 不存在变量提升 4) 不影响作用域链 5) 暂时性死区 6)不与顶级对象挂钩 在代码块内,使用let命令声明变量之前&#x…...
有关数据库表的冗余字段
有关数据库表的冗余字段 之前看一个开发人员的技术研讨视频,提到了一个数据库表设计中的表拆分字段冗余问题,就是一张表做纵向分表,拆分为a和b以做冷热数据分离存储,但是会有一种情况就是相同的字段值在a,b表中重复出现…...
知识图谱补全KGC
目录 基础知识知识图谱补全概念性能指标 一、翻译模型的知识图谱补全1.TransE2.TransH3.RotatE 二、张量分解的知识补全1.RESCAL2.ComplEx 三、神经网络的知识图谱补全1.卷积神经网络CNN(一般用于二维图像处理)ConvE 2.循环神经网络RNN3.图神经网络GNN1&…...
独立开发者的内容营销教程
内容营销对于独立开发者来说,是一种低成本、高效的方式来推广产品、建立品牌影响力和吸引潜在用户。通过分享有价值、相关性强的内容,您可以吸引用户的注意力,增强用户黏性,并最终将他们转化为忠实用户或客户。以下是详细的独立开…...
Mysql——约束与多表查询
一、约束 1.1定义 约束是对表中的数据进行限制的一套规则,用于防止用户向数据库中输入无效数据。它可以保证表中的数据满足特定业务规则和逻辑,从而维护数据的准确性和可靠性。 1.2作用 数据完整性 :约束可以确保数据在插入、更新或删除时符…...
DockerでOracle Database 23ai FreeをセットアップしMAX_STRING_SIZEを拡張する手順
DockerでOracle Database 23c FreeをセットアップしMAX_STRING_SIZEを拡張する手順 はじめに環境準備ディレクトリ作成Dockerコンテナ起動 データベース設定変更コンテナ内でSQL*Plus起動PDB操作と文字列サイズ拡張設定検証 管理者ユーザー作成注意事項まとめ はじめに Oracle…...
Unity 运用正则表达式保留字符串中的中文英文字母和数字
正则表达 正则表达式 – 语法 | 菜鸟教程 Regex 类 (System.Text.RegularExpressions) | Microsoft Learn 保留字符串中的中英数 中英数的正则表达。 patten "[\u4e00-\u9fa5A-Za-z0-9]"; 使用Regex 类匹配正则并保留。 matches Regex.Matches(str, patten)…...
vue el-table-column 单元表格的 省略号 实现
要对 el-table-column 的某一列中的每个单元格值进行处理,使其在文本内容超出指定宽度时显示省略号(…),可以通过以下方法实现: 使用 scoped slots:利用 Element UI 提供的 scoped slots 自定义单元格内容…...
企业微信里可以使用的企业内刊制作工具,FLBOOK
如何让员工及时了解公司动态、行业资讯、学习专业知识,并有效沉淀企业文化?一份高质量的企业内刊是不可或缺的。现在让我来教你该怎么制作企业内刊吧 1.登录与上传 访问FLBOOK官网,注册账号后上传排版好的文档 2.选择模板 FLBOOK提供了丰富的…...
【数据挖掘】Pandas
Pandas 是 Python 进行 数据挖掘 和 数据分析 的核心库之一,提供了强大的 数据清洗、预处理、转换、分析 和 可视化 功能。它通常与 NumPy、Matplotlib、Seaborn、Scikit-Learn 等库结合使用,帮助构建高效的数据挖掘流程。 📌 1. 读取数据 P…...
explore与explode词源故事
英语单词explore来自古法语,源自拉丁语,由前缀ex-(出来)加词根plor-(叫喊)以及末尾的小尾巴-e组成,字面意思就是“喊出来,通过叫喊声赶出来”。它为什么能表示“探索”呢?…...
CAM350_安装
版本:V14.5 一、安装 打开.exe文件 选择不重启,然后再打开这个.exe 再来一次类似的操作 二、配置 复制patch文件夹中的这三个 ,粘贴到掉安装目录中 设置ACT_INC_LICENSE_FILE用户环境变量来设置license管理 打开电脑的环境变量 破解完毕&am…...
观察Taotoken按Token计费模式如何帮助项目控制预算
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 观察Taotoken按Token计费模式如何帮助项目控制预算 对于依赖大模型API进行开发的团队和个人而言,成本控制是一个贯穿项…...
跨境社媒运营真正难的 不是内容不够而是账号越来越没有“主线感”
很多团队做跨境社媒时,前期最容易把注意力放在内容数量上。 今天发没发,明天补几条,哪个平台还没铺,哪种形式最近更容易起量。 这些当然重要,因为账号在起步阶段,首先得先“动起来”。但真正做一段时间之后…...
UPS电源部分
1.法国最好的ups 施耐德电器 美国最好的ups 伊顿 瑞士最好的ups ABB 日本最好的ups 三菱电器 台湾是 台达电子 对的吗2.施耐德电气 (Schneider Electric):虽然公司总部在法国,但其UPS业务的核心是旗下的APC(美国电力转换公司&…...
3步告别资源焦虑:跨平台下载神器res-downloader深度解析
3步告别资源焦虑:跨平台下载神器res-downloader深度解析 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 你是否曾…...
YgoMaster终极指南:如何在电脑上免费畅玩游戏王大师决斗
YgoMaster终极指南:如何在电脑上免费畅玩游戏王大师决斗 【免费下载链接】YgoMaster Offline Yu-Gi-Oh! Master Duel 项目地址: https://gitcode.com/gh_mirrors/yg/YgoMaster 你是否渴望随时随地体验《游戏王大师决斗》的精彩对决,却受限于网络连…...
大模型概念遗忘:SCUGP梯度投影实现精准神经外科手术
1. 项目概述:这不是“删除记忆”,而是给大模型做一次精准的神经外科手术“Who is Harry Potter?”——这个看似简单的问答,恰恰成了检验大模型“概念遗忘”能力的黄金测试题。微软研究院这篇论文标题里藏着一个反直觉的事实:他们…...
[具身智能-855]:什么是AI应用?AI 应用、AI 模型、AI Agent三者区别?
一、定义AI 应用:搭载人工智能技术,具备智能理解、推理、生成、识别、决策能力,能自主完成人类事务的软件、程序、系统、设备。二、狭义 AI 应用(纯 AI 工具,最常见)专门靠 AI 干活,一眼看出是 …...
企业从 Excel 管理转向系统化管理的关键步骤
企业从 Excel 管理转向系统化管理的关键步骤 几乎每家中小企业都经历过 Excel 管理阶段。客户表、合同表、项目表、库存表、资产表、员工表、回款表,一个个表格撑起了企业早期管理。Excel 的优势很明显:灵活、低成本、人人会用。 但企业规模一旦扩大&…...
Unity ShaderGraph环境搭建:URP配置与节点库激活指南
1. 这不是“装个插件就完事”的 ShaderGraph 入门很多人点开 Unity 官方文档里那句“Shader Graph is included with Unity 2019.1”就直接关掉页面,以为只要打开 Unity 就能拖拽节点写 Shader——结果新建一个 Shader Graph Asset,双击打开,…...
终极指南:5分钟搭建Rust高性能HTTP文件服务器,告别繁琐配置
终极指南:5分钟搭建Rust高性能HTTP文件服务器,告别繁琐配置 【免费下载链接】simple-http-server Simple http server in Rust (Windows/Mac/Linux) 项目地址: https://gitcode.com/gh_mirrors/si/simple-http-server Simple HTTP Server是一款基…...
