LeetCode 160.相交链表

news2025/7/7 13:11:04

在这里插入图片描述

文章目录

  • 💡题目分析
  • 💡解题思路
    • 🚩步骤一:找尾节点
    • 🚩步骤二:判断尾节点是否相等
    • 🚩步骤三:找交点
      • 🍄思路1
      • 🍄思路2
  • 🔔接口源码

在这里插入图片描述
题目链接👉 LeetCode 160.相交链表👈

💡题目分析

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

💡解题思路

🚩步骤一:找尾节点

	struct ListNode* tailA = headA;
    struct ListNode* tailB = headB;
    int lenA = 1,lenB = 1;

    while(tailA)
    {
        tailA = tailA->next;
        lenA++;
    }
    while(tailB)
    {
        tailB = tailB->next;
        lenB++;
    }

🚩步骤二:判断尾节点是否相等

判断尾节点是否相等,如果尾节点相等就是相交

if (tailA != tailB)
{
    return NULL;
}

🚩步骤三:找交点

🍄思路1

A链表所有节点跟B链表都比较一遍,相等的那个就是交点

这种暴力求解法解决这道题是没问题的。但是这种解法时间复杂度为 O(N^2) / O(N*M),要求优化到 O(N),所以我们不采用这种暴力解法,建议使用下一种解法👇

🍄思路2

分别定义两个链表的长度 lenA 和 lenB,长的先走abs(lenA - lenB)步(差距步),然后再同时走,第一个相等的就是相交节点

	//长的先走差距步
    int gap = abs(lenA - lenB); //abs函数是对整数进行取绝对值
    struct ListNode* longList = headA;
    struct ListNode* shortList = headB;
    if(lenA < lenB)
    {
        longList = headB;
        shortList = headA;
    }

    while(gap--)
    {
        longList = longList->next;
    }

    while(longList != shortList)
    {
        longList = longList->next;
        shortList = shortList->next;
    }

👇图解👇
在这里插入图片描述

此方法整体时间复杂度为:O(M+N) / O(N),空间复杂度为:O(1)

🔔接口源码

struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) 
{
    struct ListNode* tailA = headA;
    struct ListNode* tailB = headB;
    int lenA = 1,lenB = 1;

    while(tailA)
    {
        tailA = tailA->next;
        lenA++;
    }
    while(tailB)
    {
        tailB = tailB->next;
        lenB++;
    }

    //判断最后一个节点是否相等(是否相交)
    if(tailA != tailB)
    {
        return NULL;
    }

    //长的先走差距步
    int gap = abs(lenA - lenB);
    struct ListNode* longList = headA;
    struct ListNode* 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;
}

在这里插入图片描述

🥰希望烙铁们能够理解欧!

总结🥰
以上就是本题讲解的全部内容啦🥳🥳🥳🥳
本文章所在【C/C++刷题系列】专栏,感兴趣的烙铁可以订阅本专栏哦🥳🥳🥳
前途很远,也很暗,但是不要怕,不怕的人面前才有路。💕💕💕
小的会继续学习,继续努力带来更好的作品😊😊😊
创作写文不易,还多请各位大佬uu们多多支持哦🥰🥰🥰

请添加图片描述

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

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

相关文章

九五从零开始的运维之路(其三十五)

文章目录 前言一、概述1.概念2.组成3.特点4.工作原理5.优点&#xff1a; 二、各节点及其ip地址三、构建MHA1.ssh免密登录2.构建mysql主从复制&#xff08;一&#xff09;安装mariadb数据库并启动&#xff08;二&#xff09;master服务器&#xff08;三&#xff09;slave服务器&…

【Java转Go】快速上手学习笔记(二)之基础篇一

目录 创建项目数据类型变量常量类型转换计数器键盘交互流程控制代码运算符 创建项目 上篇我们安装好了Go环境&#xff0c;和用IDEA安装Go插件来开发Go项目&#xff1a;【Java转Go】快速上手学习笔记&#xff08;一&#xff09;之环境安装篇 。 这篇我们开始正式学习Go语言。我…

【数据结构OJ题】链表中倒数第k个结点

原题链接&#xff1a;https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?tpId13&&tqId11167&rp2&ru/activity/oj&qru/ta/coding-interviews/question-ranking 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 …

数据结构的树存储结构

数据结构的树存储结构 之前介绍的所有的数据结构都是线性存储结构。本章所介绍的树结构是一种非线性存储结构&#xff0c;存储的是具有“一对多”关系的数据元素的集合。 (A) (B) 图 1 树的示例 图 …

vue树状结构以及设计思路

设计思路&#xff1a;多级数组循环遍历&#xff0c;第一层样式加三角形折叠&#xff0c;第二层在文字前方加 —&#xff08;横线&#xff09;&#xff0c;第三层加横线&#xff0c;第四层加点。给第二层第三层左侧加左边框&#xff0c;用translateY进行位移就形成了树状样式。 …

《起风了》C++源代码

使用方法 Visual Studio、Dev-C、Visual Studio Code等C/C创建一个 .cpp 文件&#xff0c;直接粘贴赋值即可。 #include <iostream> #include <Windows.h> #pragma comment(lib,"winmm.lib") using namespace std; enum Scale {Rest 0, C8 108, B7 …

SpringBoot08——前端数据模拟MockJS+vue-element-admin后台集成

感觉用到再说吧 2. vue-element-admin后台集成 3.JWT跨域认证 看自己的demo2源码吧

好用的networkx绘图包

1. NetworkX简介 NetworkX 是一个用于创建、操作和研究复杂网络的 Python 库。它可以创建、分析和可视化各种类型的网络(包括有向图和无向图)&#xff0c;例如社交网络、Web图、生物网络等。 NetworkX 提供了许多图的算法和分析工具&#xff0c;比如节点的度、网络的直径、最短…

jvm内存溢出排查(使用idea自带的内存泄漏分析工具)

文章目录 1.确保生成内存溢出文件2.使用idea自带的内存泄漏分析工具3.具体实验一下 1.确保生成内存溢出文件 想分析堆内存溢出&#xff0c;一定在运行jar包时就写上参数-XX:HeapDumpOnOutOfMemoryError&#xff0c;可以看我之前关于如何运行jar包的文章。若你没有写。可以写上…

express学习笔记8 - 文件上传 下载以及预览

一、上传 1、 安装multer (任意选其中一种) yarn add multer --S npm install multer --S 2、新建配置文件(utils/multerConfig) const multer require(multer); const mkdirp require(mkdirp); // const sd require(silly-datetime); const path require(path);con…

什么叫加杠杆投资_个人炒股如何加杠杆

加杠杆投资是指通过借款或者杠杆交易的方式&#xff0c;以较小的自有资金控制较大的资金进行投资。在加杠杆的情况下&#xff0c;投资者可以获得更高的投资回报&#xff0c;但同时也面临较高的风险。 个人炒股加杠杆可以通过以下几种方式实现&#xff1a; 1. 股票配资&#x…

GT Code - 图译算法编辑器(集成QT、C++、C、Linux、Git、java、web、go、高并发、服务器、分布式、网络编程、云计算、大数据项目)

目录 项目概述 发文意义 项目介绍 功能分析 设计概要 功能展示 项目文档 项目概述 “GT Code 图译算法编辑器”是一款跨平台、轻量级的代码编辑器&#xff0c;主要面向软件开发人员&#xff0c;它实现了编辑、编译、绘制代码流程图、生成调试演示动画等功能&#xff0c;以…

透过源码理解Flutter中widget、state和element的关系

1、framework源码组成 Flutter中widget、state、element的源码位于framework.dart中&#xff0c;整个文件6693行(版本Flutter 3.12.0-14.0.pre.28)。整个代码可划分为若干部分&#xff0c;主要包括key、widget、state、element四部分。 1.1 key 关于key的代码65行到272行&am…

STM32存储左右互搏 I2C总线FATS读写EEPROM ZD24C1MA

STM32存储左右互搏 I2C总线FATS读写EEPROM ZD24C1MA 在较低容量存储领域&#xff0c;EEPROM是常用的存储介质&#xff0c;可以通过直接或者文件操作方式进行读写。不同容量的EEPROM的地址对应位数不同&#xff0c;在发送字节的格式上有所区别。EEPROM是非快速访问存储&#xf…

【C语言】每日一题(多数元素)

多数元素&#xff0c;链接奉上 方法 1.摩尔投票2.合理但错误的方法2.1暴力循环2.2排序求出中间元素中间元素 1.摩尔投票 先来简单的介绍摩尔投票&#xff1a; 摩尔投票是一种用来解决绝对众数问题的算法。 什么是绝对众数呢&#xff1f; 在一个集合中&#xff0c;如果一个元素…

Java:迭代器常用方法、增强for循环、Lambda 表达式遍历集合、遍历集合案例

Java 迭代器概述&#xff1a;Iterator 迭代器常用方法 使用迭代器遍历集合时&#xff0c;一开始 it.next()在赵敏的位置&#xff0c;所以第一个打印输出的是赵敏&#xff0c;第二次就到了小昭的位置&#xff0c;第三次到了素素&#xff0c;第四次灭绝&#xff0c;如果多打印了…

探索Java中的面向对象与函数式编程思想

文章目录 &#x1f389; 欢迎来到 Java 学习路线专栏~探索Java中的面向对象与函数式编程思想1. 思想概述面向对象思想函数式编程思想 2. 面向对象思想写代码3. Lambda表达式格式4. 练习4.1 无参无返回值4.2 有参有返回值 5. Lambda省略格式6. 使用Lambda的前提条件 &#x1f38…

智慧乡村综合管控平台_数字孪生

数字乡村是伴随网络化、信息化和数字化在农业农村经济社会发展中的应用&#xff0c;既是乡村振兴的战略方向&#xff0c;也是建设数字中国的重要内容。为了进一步提升乡村治理智能化、专业化水平&#xff0c;解决建设顶层缺失、数据孤岛等问题&#xff0c;数字孪生技术被广泛应…

谈谈智慧农业系统

目录 1.智慧农业的概念 2.智慧农业会用到什么技术 3.智慧农业的优势 4.智慧农业的发展前景 1.智慧农业的概念 智慧农业&#xff08;Smart Agriculture&#xff09;&#xff0c;也被称为农业4.0&#xff0c;是利用先进的信息技术和物联网技术来改进农业生产效率、可持续性和农…

JAVA生成订单号根,可自定义长度、前缀

效率还可以&#xff0c;生成100万数据大概在1秒多左右&#xff0c;不想写说明了&#xff0c;直接粘贴~ public static void main(String[] args) {System.out.println("开始时间" new SimpleDateFormat("YYYY-MM-dd HH:mm:ss:SSS").format(new Date()));L…