「题解」相交链表

🍉题目

题目链接
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

🍉解析

“提示”部分有提示链表数不为零,所以讨论链表为空的情况。
最简单粗暴的思路就是:遍历链表,先使用循环遍历A链表,然后嵌套循环遍历B,比对A、B是否存在地址相同的节点,若有,则第一个这样的节点就是相交的起点。
这里的思路就是比对地址,我们不能比较节点值是否相等,毕竟不同节点的值可以相等
但是这样的时间复杂度O(N^2),显然不是最优解法。下面来看比较好的解法。
知道大思路是比较地址相不相等之后,还有一个问题:两个链表的长度不一样。这个问题倒是不难解决,我们直接让长的链表先走,它比短的链表多几个节点,就先走几个节点,既然如此,那先来获取链表长度吧。

int len1 = 0,len2 = 0;ListNode* cur1 = headA,*cur2 = headB;//得到两链表长度while(cur1) {cur1 = cur1->next;len1++;}while(cur2) {cur2 = cur2->next;len2++;}int gap = abs(len1 - len2); //求出相差几个节点

这里用绝对值函数abs,就不用分类讨论len1、len2谁比较长了
然后又有一个问题,我不知道谁比较长啊,又要写条件语句分类讨论了……
其实大可不必,这里使用假设法就非常省事儿了,怎么个假设法?一开始假设A是长链表,B是短链表,写个 if :如果 len1 真比 len2 长,就往下走;如果 len1 比 len2 短,那就A和B交换。

ListNode* longlist = headA; //先假设a是较长的链表ListNode* shortlist = headB;if(len1 < len2) {longlist = headB;shortlist = headA;}while(gap--) {longlist = longlist->next;}

那现在A和B要走的节点数就一样了,接下来边走边比较咯。
整道题代码如下:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
typedef struct ListNode ListNode;
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {int len1 = 0,len2 = 0;ListNode* cur1 = headA,*cur2 = headB;//得到两链表长度while(cur1) {cur1 = cur1->next;len1++;}while(cur2) {cur2 = cur2->next;len2++;}int gap = abs(len1 - len2); //求出相差几个节点ListNode* longlist = headA; //先假设a是较长的链表ListNode* shortlist = headB;if(len1 < len2) {longlist = headB;shortlist = headA;}while(gap--) {longlist = longlist->next;}while(longlist) {if(longlist == shortlist) {return longlist;}longlist = longlist->next;shortlist = shortlist->next;}return NULL;
}

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

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

相关文章

libusb获取Windows设备实例路径DevicePath

libusb 当前版本&#xff08;1.0.26&#xff09;libusb.h 头文件提供的接口似乎没有办法获取 Windows 平台相关的设备实例路径&#xff0c;其形如&#xff1a; \\?\usb#vid_04ca&pid_7070#5&20d34a76&0&6#{a5dcbf10-6530-11d2-901f-00c04fb951ed} 只是提供了…

AIGC大模型-初探

大语⾔模型技术链 1. ⾃然语⾔处理 2. 神经⽹络 3. ⾃注意⼒机制 4. Transformer 架构 5. 具体模型 - GPT6. 预训练&#xff0c;微调 7. ⼤模型应⽤ - LangChain 大语⾔模型有什么用&#xff1f; 利⽤⼤语⾔模型帮助我们理解⼈类的命令&#xff0c;从⽽处理⽂本分析…

SQL练习---619.出现一次的最大数字

题目 分析 首先确定表的来源只有一个表数字表&#xff0c;再者判断他是不是单一数字&#xff0c;&#xff08;想到的是直接按数字分组&#xff0c;通过count函数来判断是否为单一数子&#xff09;&#xff0c;然后求最大值。 题解 select Max(num) as num from MyNumbers wh…

一文详解oa人事系统!

一、什么是OA系统 OA系统全称为Office Automation&#xff0c;即办公自动化系统。它是一种专门为企业和机构的日常办公工作提供服务的综合性软件平台&#xff0c;具有信息管理、流程管理、知识管理&#xff08;档案和业务管理&#xff09;、协同办公等多种功能。 OA系统可以帮…

关于修改了mysql的my_conf文件之后,不能生效问题

个人名片&#xff1a; &#x1f405;作者简介&#xff1a;一名大三在校生&#xff0c;热爱生活&#xff0c;爱好敲码&#xff01; \ &#x1f485;个人主页 &#x1f947;&#xff1a;holy-wangle ➡系列内容&#xff1a; &#x1f5bc;️ tkinter前端窗口界面创建与优化 &…

Hive 查询优化

Hive 查询优化 -- 本地 set mapreduce.framework.namelocal; set hive.exec.mode.local.autotrue; set mapperd.job.trackerlocal; -- yarn set mapreduce.framework.nameyarn; set hive.exec.mode.local.autofalse; set mapperd.job.trackeryarn-- 向量模式 set hive.vectori…

科研学习|研究方法——案例研究设计与方法

作者&#xff1a;罗伯特K.殷 &#xff08;一&#xff09;计划&#xff1a;如何把握何处、何时用案例研究方法 1.问题&#xff1a; 按照作者的观点&#xff0c;案例研究1984年之后才逐渐得到重视&#xff0c;可是在数据信息有效收集的时代&#xff0c;几乎所有的经典都是以案例…

无人零售:创新优势与广阔前景

无人零售&#xff1a;创新优势与广阔前景 无人零售在创新方面具有优势。相比发展较为成熟的欧洲和日本的自动贩卖机市场&#xff0c;中国的无人零售市场人均占有量较少&#xff0c;这表明该市场具有广阔的前景和巨大的市场潜力。 此外&#xff0c;无人零售涉及到许多相关行业&…

在PyTorch中使用CUDA, pytorch与cuda不同版本对应安装指南,查看CUDA版本,安装对应版本pytorch

目录 1 查看本机CUDA版本 2 查看对应CUDA的对应pytorch版本安装 3 用pip 安装 4 用conda安装 5 验证安装 在PyTorch中使用CUDA&#xff0c;根据你的具体环境和需求调整版本号&#xff0c;确保安装的PyTorch版本与你的CUDA版本兼容。 在PyTorch中使用CUDA&#xff0c;你需…

OpenCV入门——图像视频的加载与展示一些API

文章目录 OpenCV创建显示窗口OpenCV加载显示图片OpenCV保存文件利用OpenCV从摄像头采集视频从多媒体文件中读取视频帧将视频数据录制成多媒体文件OpenCV控制鼠标关于[np.uint8](https://stackoverflow.com/questions/68387192/what-is-np-uint8) OpenCV中的TrackBar控件TrackBa…

activiti7审批驳回,控制变量无法覆盖,导致无限循环驳回,流程无法结束

项目开发过程中使用工作流&#xff0c;因此考虑使用activiti7做完工作流引擎。项目开发过程中&#xff0c;发现流程驳回时&#xff0c;再次执行流程&#xff0c;控制变量无法覆盖&#xff0c;导致无限循环驳回&#xff0c;流程无法结束。流程图如下图所示&#xff1a; 驳回控制…

番外 1 : Java 环境下的 selenium 搭建

Java 环境下的 selenium 搭建 一 . 下载谷歌浏览器二 . 下载谷歌浏览器驱动2.1 查看谷歌浏览器版本2.2 下载对应版本的谷歌驱动2.3 解压下载好的驱动压缩包 , 将下载好的 chromedriver.exe 放到java 系统环境变量下 三 . 下载 Edge 浏览器的驱动3.1 查看 Edge 浏览器的版本3.2 …