「题解」相交链表

🍉题目

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

🍉解析

“提示”部分有提示链表数不为零,所以讨论链表为空的情况。
最简单粗暴的思路就是:遍历链表,先使用循环遍历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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JSP注释方式演示 讲解显式与隐式注释

好 今天我们来了解一下jsp中的注释哦 它支持两种注释: 显式注释/隐式注释 显式注释 是 允许被客户端看到的 就是 打开浏览器 用查看源码方式能看到的注释 与之对应 隐式注释 就是 在客户端 是无法看到这些注释信息的 显式注释 的语法就是html的注释语法 <!-- 显式注释 --…

文生图超级大合集!几乎包含所有模型,提示词教程

除了DALLE 3、Midjourney、Stable Difusion&#xff0c;你还知道哪些好用小众的文生图模型吗&#xff1f; 你知道一张精美的AI图片&#xff0c;需要哪些精准的提示词、效果融合以及制作流程吗&#xff1f; 如果把几乎所有文生图模型集合在一个平台中&#xff0c;并且还能叠加…

小波神经网络的时间序列预测——短时交通流量预测

大家好&#xff0c;我是带我去滑雪&#xff01; 小波神经网络&#xff08;Wavelet Neural Network&#xff0c;WNN&#xff09;结合了小波变换和神经网络的特性&#xff0c;是一种在信号处理和模式识别领域应用广泛的神经网络模型。它的设计灵感来自于小波变换的多尺度分析特性…

pyCharm新建项目

1.新建界面点击Create New Project。 或点击File->New Project... 2.选择Pure Python后&#xff0c;如图选择路径。 Location的地址一致&#xff0c;点击Create。 3.等待新建成功后&#xff0c;在新建的项目名字右击&#xff0c;如下图可以选择新建文件夹、python包和python…

信息检索与数据挖掘 | 【实验】检索评价指标MAP、MRR、NDCG

文章目录 &#x1f4da;实验内容&#x1f4da;知识梳理&#x1f4da;实验步骤&#x1f407;前情提要&#x1f407;MAP评价指标函数&#x1f407;MRR 评价指标函数&#x1f407;NDCG评价指标函数&#x1f407;调试结果 &#x1f4da;实验内容 实现以下指标评价&#xff0c;并对…

Acrobat Pro DC 2023 中文版

Acrobat Pro DC 2023是PDF编辑和管理软件&#xff0c;具有以下优点&#xff1a; 更好的安全性&#xff1a;Acrobat Pro DC 2023采用了新的安全功能&#xff0c;包括加密、数字签名等&#xff0c;可以更好地保护PDF文件的安全性。 更高的速度和性能&#xff1a;Acrobat Pro DC …

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

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

Python小白之PyCharm仍然显示“No module named ‘xlwings‘”

Python小白之“没有名称为xlwings‘的模块”-CSDN博客文章浏览阅读8次。cmd 打开命令行&#xff0c;输入python出现>>>的提示格&#xff0c;输入import xlwings 回车&#xff0c;正常报错&#xff1a;No module named xlwings。输入python 回车后&#xff0c;再输入im…

黑客帝国中的黑客如何隐藏自己的IP,你不可不知的正向代理和反向代理

文章目录 前言正向代理常用使用场景VPN动态 IP 代理隐藏客户端 IP 反向代理使用场景堡垒机nginx 负载均衡 动态 IP 代理实现分类按匿名分类按成本分类按协议分类 原理nodeJs 简单实现 总结个人简介 前言 hello&#xff0c;大家好&#xff0c;我是 Lorin &#xff0c;今天给大家…

c# 字符串转化成语音合成,System.Speech

C# 语音合成可以使用 System.Speech.Synthesis 命名空间中的 SpeechSynthesizer 类来实现。SpeechSynthesizer 类提供了一系列方法和属性&#xff0c;可以用来控制语音合成的过程&#xff0c;包括设置语音、音调、语速等。 下面是一个简单的示例&#xff0c;用来演示如何使用 …

SpringBoot写接口小记 以及 几个层的功能总结(自用 勿喷)

目录 Entity层&#xff1a;实体层 数据库在项目中的类 Mapper层&#xff1a; 持久层 主要与数据库进行交互 Service层&#xff1a;业务层 控制业务 Controller层&#xff1a;控制层 控制业务逻辑 Entity层&#xff1a;实体层 数据库在项目中的类 Entity层是实体层&#xff…

WP光电信息学院2023年网络安全季度挑战赛-测试赛

签个到就跑WP Misc MISC-没爱了&#xff0c;下一个 下载附件压缩包解压之后&#xff0c;获得一个流量包文件 使用wireShark打开流量包&#xff0c;Ctrl F 搜索flag{即可获得flag flag{Good_b0y_W3ll_Done}MISC-送你一朵小花花 下载附件压缩包解压之后&#xff0c;获得一…

模电的100个公式

文章目录 1.晶体二极管的伏安特性2.二极管的钳位电路&#xff08;τRC&#xff0c;放电时间等于5τ&#xff09;3.晶体三极管4.绝缘型FET场效应管&#xff08;MOS管&#xff0c;4种&#xff0c;P/N沟道&#xff0c;增强型/耗尽型&#xff09;CMOS和VMOSMOS管的特性曲线&#xf…

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

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

服务号转订阅号如何操作

服务号和订阅号有什么区别&#xff1f;服务号转为订阅号有哪些作用&#xff1f;一、文章推送的篇数不同服务号在文章的推送篇数上是有所限制的&#xff08;每月推4次&#xff09;订阅号则每天可推送一篇文章。二、定义不同服务号主要是为关注用户提供服务使用的&#xff1b;订阅…

Class 7: MMDetection代码课

Class7&#xff1a; MMDetection代码课 文章目录 Class7&#xff1a; MMDetection代码课[toc]依赖&安装依赖 数据集准备RTMDetConfig模型配置数据集和评测器配置训练和测试的配置优化相关配置 训练测试以及推理可视化分析特征图可视化Grad-Based CAM 可视化 检测新趋势总结…

千兆光模块和万兆光模块在网络安全中的重要性

千兆光模块和万兆光模块是网络通信中不可或缺的基础设施&#xff0c;它们的性能和稳定性对于网络安全至关重要。在网络安全意识不断提高的今天&#xff0c;光模块的重要性也越来越被人们所重视。 一、 光模块的作用、优势和适用范围 光模块是一种支持热插拔的网络通信设备&a…

充电台灯好还是插电的好?五款热门插电护眼台灯推荐

选择充电式台灯还是插电式台灯需要根据不同的需求和考虑因素进行权衡&#xff0c;如果需要在没有电源插座的地方使用或者需要频繁移动&#xff0c;充电式台灯是更好的选择&#xff1b;如果需要长时间稳定使用&#xff0c;插电式台灯是更好的选择。同时&#xff0c;我们还应该注…

2023年好用的远程协同运维工具当属行云管家!

对于IT小伙伴而言&#xff0c;一款好用的远程协同运维工具是非常重要的&#xff0c;不仅可以提高工作效率&#xff0c;还能第一时间解决运维难题&#xff0c;所以好用的远程协同工具是非常必要的。这里就给大家推荐一款哦&#xff01; 2023年好用的远程协同运维工具当属行云管…