C语言每日一题(31)相交链表

力扣160.相交链表

题目描述

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。

图示两个链表在节点 c1 开始相交

题目数据 保证 整个链式结构中不存在环。

注意,函数返回结果后,链表必须 保持其原始结构 。

思路分析

首先明确题目所要求的:

1.两链表是否相交?

2.如果相交的话,交点在哪?

首先解决第一个问题,判断是否相交。首先两个链表的头结点可能一样也可能不一样,但如果相交的话,它们的尾结点一定是同一个,那么我们可以分别遍历这两个链表到尾,如果一样的话就代表它们一定相交,否则直接返回false。

到第二个问题,找交点,如果俩链表同时从头遍历,再找它们相同的结点的话,那么当俩链表长度不同,指针就会错位,这是不靠谱的做法,正确的做法是,将它们遍历的起点进行统一后再进行遍历,直到碰到相同的结点,就是它们的交点。

如何统一起点呢?

首先找出较长链表,将俩链表长度的差当作步数,让长链表的指针先走完这些步数,这样两个链表的指针就统一了,之后两个指针再一起遍历,直到碰到相同结点停止,返回任意一个指针即是对应的交点。

完整代码

/*** 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;//从1开始。while(curA){lenA++;curA=curA->next;}while(curB){lenB++;curB=curB->next;}if(curA!=curB)/判断是否相交{return NULL;}int n=abs(lenA-lenB);struct ListNode* longlist=headA,*shortlist=headB;//可以先假设其中一个为长链表。if(lenB>lenA)//如果不是在交换即可。{longlist=headB;shortlist=headA;}while(n--)//长指针先走{longlist=longlist->next;}while(shortlist!=longlist)//两个一起走,直到相同停下{shortlist=shortlist->next;longlist=longlist->next;}return longlist;//返回其中任意一个即可。
}

实现细节

注意比较的是该节点而非该节点的值,因为链表是乱序且无规律的。 

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

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

相关文章

新手老师怎么发布班级查询?

现在科技发展飞快,班级查询系统已经成为了许多学校必备的教务工具。可以让学生们快速查找到班级的各项信息,包括但不限于课程安排、考试成绩、分班等。对老师来说,班级查询系统可以提高工作效率,减少重复劳动,学生或者…

SQL ALTER TABLE 语句||SQL AUTO INCREMENT 字段

SQL ALTER TABLE 语句 ALTER TABLE 语句 ALTER TABLE 语句用于在现有表中添加、删除或修改列。 SQL ALTER TABLE 语法 若要向表中添加列,请使用以下语法: ALTER TABLE table_name ADD column_name datatype 若要删除表中的列&am…

基于蝠鲼觅食算法优化概率神经网络PNN的分类预测 - 附代码

基于蝠鲼觅食算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于蝠鲼觅食算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于蝠鲼觅食优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

ubuntu中cuda12.1配置(之前存在11.1版本的cuda)(同时配置两个版本)

ubuntu中cuda12.1配置 由于YOLOv8项目中Pytorch版本需要cuda12.1版本 在官网下载12.1版本的deb包 官网地址 sudo dpkg -i cuda-keyring_1.0-1_all.deb sudo apt-get update sudo apt-get -y install cuda然后需要修改bashrc文件(隐藏文件) 添加 exp…

格力报案称“高管遭自媒体侮辱诽谤”

我是卢松松,点点上面的头像,欢迎关注我哦! 王自如的一番话引来了众多围攻,格力已报警,高管遭到侮辱诽谤。这应该是近年来少见的大企业和网络大v之间公开翻脸互撕的场景了! 就在今天格力就高管遭自媒体侮辱诽谤报案。…

云计算发展

云计算,作为当今信息技术领域的核心力量,正在快速推动着我们社会的数字化转型。从智能家居到无人驾驶,从虚拟现实到人工智能,云计算的应用无处不在,它不仅仅是一个技术概念,更是一种全新的生活方式。在这个…

关系代数、SQL语句和Go语言示例

近些年,数据库领域发展日新月异,除传统的关系型数据库外,还出现了许多新型的数据库,比如:以HBase、Cassandra、MongoDB为代表的NoSQL数据库,以InfluxDB、TDEngine为代表的时序数据[1]库,以Neo4J…

jQuery UI简单的讲解

我们先进入一下问答时间,你都知道多少呢? (1)什么是jQuery UI 呢? 解答:jQuery UI 是以 jQuery 为基础的开源 JavaScript 网页用户界面代码库。包含底层用户交互、动画、特效和可更换主题的可视控件。我们…

无需公众号实现微信JSSDK分享卡片!Safari浏览器分享到微信自动成卡片!

摘要 要在微信分享卡片&#xff0c;需要接入微信自家的JSSDK&#xff0c;比较麻烦&#xff0c;还需要认证公众号&#xff0c;但是如果你没有这样的条件&#xff0c;那么你也可以试试使用iOS的Safari浏览器轻松实现&#xff0c;只需要在html中加入3个meta即可。 代码 <!DO…

初始MySQL(七)(MySQL表类型和存储引擎,MySQL视图,MySQL用户管理)

目录 MySQL表类型和存储引擎 MyISAM MEMORY MySQL视图 我们先说说视图的是啥? 视图的一些使用细节 MySQL用户管理 原因 常见操作 MySQL表类型和存储引擎 -- 查看所有的存储引擎 SHOW ENGINES 我们常见的表有MyISAM InnoDB MEMORY 1.MyISAM不支持事务,也不支持外…

pytorch 安装 2023年

pytorch网址&#xff1a;https://pytorch.org/get-started/locally/ conda install pytorch torchvision torchaudio pytorch-cuda11.8 -c pytorch -c nvidia我在自己电脑上用这个pip命令完全安装不了&#xff0c;只能用conda安装。复制上面提供的命令&#xff0c;在cmd中直接运…

C++ 多线程使用

使用多线程思考 若程序中存在耗时操作&#xff0c;且耗时操作数据不与其他发生交互&#xff0c;如下载数据&#xff0c;那么直接进行线程操作即可。如果耗时操作需要进行数据交互&#xff0c;而且耗时操作能分成并行的两部分或多部分&#xff0c;那么也可以进行多线程进行加速…

VIM去掉utf-8 bom头

Windows系统的txt文件在使用utf-8编码保存时会默认在文件开头插入三个不可见的字符&#xff08;0xEF 0xBB 0xBF&#xff09;称为BOM头 BOM头文件 0.加上BOM标记&#xff1a; :set bomb 1.查询当前UTF-8编码的文件是否有BOM标记&#xff1a; :set bomb? :set bomb? 2.BOM头:文…

Java中for、foreach、stream区别和性能比较

文章目录 性能比较区别使用方式和行为 性能比较 最终总结&#xff1a;如果数据在1万以内的话&#xff0c;for循环效率高于foreach和stream&#xff1b;如果数据量在10万的时候&#xff0c;stream效率最高&#xff0c;其次是foreach,最后是for。另外需要注意的是如果数据达到10…

使用Python的requests库模拟爬取地图商铺信息

目录 引言 一、了解目标网站 二、安装requests库 三、发送GET请求 四、解析响应内容 五、处理异常和数据清洗 六、数据存储和分析 七、数据分析和可视化 八、注意事项和最佳实践 总结 引言 随着互联网的快速发展&#xff0c;网络爬虫技术已经成为获取数据的重要手段…

交换排序详讲:冒泡排序+快速排序(多方法+思路+图解+代码)

文章目录 交换排序一.冒泡排序二.快速排序1.挖坑法2.Hoare法 交换排序 根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置将键值较大的记录向序列的尾部移动&#xff0c;键值较小的记录向序列的前部移动。 一.冒泡排序 /*** 冒泡排序* 时间复杂度 n^2* 空间复杂…

springBoot集成websocket实时消息推送

springBoot集成websocket实时消息推送 WebSocket是一种在Web应用程序中实现双向通信的协议。它允许在客户端和服务器之间建立持久性的连接&#xff0c;并支持双向数据传输&#xff0c;实现了实时、低延迟的通信。 &#x1f4cd;常见的消息推送方法 WebSocket&#xff1a;通过使…

常见面试题-HashMap源码

了解 HashMap 源码吗&#xff1f; 参考文章&#xff1a;https://juejin.cn/post/6844903682664824845 https://blog.51cto.com/u_15344989/3655921 以下均为 jdk1.8 的 HashMap 讲解 首先&#xff0c;HashMap 的底层结构了解吗&#xff1f; 底层结构为&#xff1a;数组 链…

redis常见问题及解决方案

缓存预热 定义 缓存预热是一种优化方案&#xff0c;它可以提高用户的使用体验。 缓存预热是指在系统启动的时候&#xff0c;先把查询结果预存到缓存中&#xff0c;以便用户后面查询时可以直接从缓存中读取&#xff0c;节省用户等待时间 实现思路 把需要缓存的方法写在初始化方…

【MySQL】聚合函数:汇总、分组数据

文章目录 学习目标MAX()、MIN()、AVG()、SUM()、COUNT()COUNT(*) 得到所有记录条目DISTINCT去重练习1&#xff08;使用UNION &#xff0c; SUM&#xff0c; BETEEN AND&#xff09;GROUP BY子句练习2&#xff08;使用sum&#xff0c;group by&#xff0c; join on&#xff0c; …