力扣160:相交链表

力扣160:相交链表

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

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

在这里插入图片描述

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

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

自定义评测:

评测系统 的输入如下(你设计的程序 不适用 此输入):

intersectVal - 相交的起始节点的值。如果不存在相交节点,这一值为 0
listA - 第一个链表
listB - 第二个链表
skipA - 在 listA 中(从头节点开始)跳到交叉节点的节点数
skipB - 在 listB 中(从头节点开始)跳到交叉节点的节点数
评测系统将根据这些输入创建链式数据结构,并将两个头节点 headA 和 headB 传递给你的程序。如果程序能够正确返回相交节点,那么你的解决方案将被 视作正确答案 。

示例 1:

在这里插入图片描述

输入: intersectVal = 8, listA = [4,1,8,4,5], listB = [5,6,1,8,4,5], skipA = 2, skipB = 3
输出: Intersected at ‘8’

示例 2:

在这里插入图片描述

输入: intersectVal = 2, listA = [1,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1

输出: Intersected at ‘2’

在这里插入图片描述

输入: intersectVal = 0, listA = [2,6,4], listB = [1,5], skipA = 3, skipB = 2
输出: null

提示:

listA 中节点数目为 m
listB 中节点数目为 n
1 <= m, n <= 3 * 104
1 <= Node.val <= 105
0 <= skipA <= m
0 <= skipB <= n
如果 listA 和 listB 没有交点,intersectVal 为 0
如果 listA 和 listB 有交点,intersectVal == listA[skipA] == listB[skipB]

分析:

  1. 解法1:暴力求解

分别遍历链表A和链表B,找到两个链表地址相同的位置即可,但是时间复杂度很高,O(n2

  1. 解法2:
  • 分别找尾节点,并记录两个链表的长度
  • 如果尾节点的地址不一样,则说明没有公共交点。注意:是比较地址,不是比较值
  • 遍历两个链表,返回相同的节点即可:
    (1)计算两个链表长度的差值,让长的链表先遍历,当长度一致时,再两个链表一起遍历。定义两个指针,一个指向较长的哪一个链表longlist,一个指向较短的链表shortlist.两个链表的长度我们不知道哪一个长哪一个短,因此需要先去判断,让较长的链表先遍历。这里有一个比较简便方法:用A链表的长度-B链表的长度,并取绝对值,假设链表A的长度较长,使longlist指向A链表的头节点headAshortlist指向B链表的头节点headB。但是,这只是假设,实际情况不知道是怎样的。所以用一个if语句,如果链表A的长度小于链表B的长度,那么规定longlist为链表B的头节点headBshortlist为链表A的头节点headB

(2)先让长的先遍历。

(3)两个链表同时遍历,如果longlist=shortlist,说明两个链表的当前节点地址相同,表明此节点为交点,则停止遍历,最后返回这个节点即可。

代码:

/**
 * 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;

    while(curA)
    {
        lenA++;
        curA=curA->next;
    }
    while(curB)
    {
        lenB++;
        curB=curB->next;
    }

    if(curA!=curB)
    {
        return NULL;
    }
    int gap=abs(lenA-lenB);
    struct ListNode*longlist=headA,*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;

}

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

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

相关文章

避免defer陷阱:拆解延迟语句,掌握正确使用方法

基本概念 Go语言的延迟语句defer有哪些特点&#xff1f;通常在什么情况下使用&#xff1f; Go语言的延迟语句&#xff08;defer statement&#xff09;具有以下特点&#xff1a; 延迟执行&#xff1a;延迟语句会在包含它的函数执行结束前执行&#xff0c;无论函数是正常返回还是…

2023年数维杯国际赛赛题思路浅析(快速选题)

2023年数维杯国际赛作为今年下半年第一场数模英文论文竞赛如期开赛。本次赛题的题设&#xff0c;难度开始向2020年之前的国赛看齐。比赛仿照美赛设置了MCM两道&#xff0c;ICM两道。需要注意的是与其他常规数模竞赛不同的是该竞赛支持各参赛队不区分组别&#xff0c;可从4套题中…

医疗软件制造商如何实施静态分析,满足 FDA 医疗器械网络安全验证

随着 FDA 对网络安全验证和标准提出更多要求&#xff0c;医疗软件制造商需要采用静态分析来确保其软件满足这些新的安全标准。继续阅读以了解如何实施静态分析来满足这些安全要求。 随着 FDA 在其软件验证指南中添加更多网络安全要求&#xff0c;医疗设备制造商可以转向静态分…

WorkPlus即时通讯app支持多种信创环境组合运行

在信息技术领域&#xff0c;国产信创技术的快速发展为企业带来了更多的选择和机会。在此背景下&#xff0c;WorkPlus作为一款全方位的移动数字化平台&#xff0c;全面支持国产信创操作系统、芯片和数据库&#xff0c;并且全面兼容鸿蒙操作系统。这一优势使得WorkPlus成为了企业…

如何使用ArcGIS Pro制作粉饰效果

在地图上&#xff0c;如果某个部分比较重要&#xff0c;直接的制图不能将其凸显出来&#xff0c;如果想要突出显示重要部分&#xff0c;可以通过粉饰效果来实现&#xff0c;这里为大家介绍一下方法&#xff0c;希望能对你有所帮助。 数据来源 本教程所使用的数据是从水经微图…

【C++&数据结构】二叉树(结合C++)的经典oj例题 [ 盘点&全面解析 ](24)

前言 大家好吖&#xff0c;欢迎来到 YY 滴数据结构系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴 数据结构 专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 目录 一.二叉树创建字符串1…

用封面预测书的价格【图像回归】

今天&#xff0c;我将介绍计算机视觉的深度学习应用&#xff0c;用封面简单地估算一本书的价格。 我没有看到很多关于图像回归的文章&#xff0c;所以我为你们写这篇文章。 距离我上一篇文章已经过去很长时间了&#xff0c;我不得不承认&#xff0c;作为一名数据科学家&#x…

Flowable 定时器事件

# 注意数据库时区的配置&#xff0c;如果差8小时配置成Asia/Shanghai spring.datasource.urljdbc:mysql://localhost:3306/flowable660?serverTimezoneAsia/Shanghai&nullCatalogMeansCurrenttrue# 开启定时任务功能 flowable.async-executor-activate: true一&#xff1a…

android studio编译SDL so库

一、下载源码 SDL官网 二、解压&#xff0c;拷贝android项目&#xff0c;并重新命名 2.1、解压 2.2&#xff0c;重命名项目名称&#xff08;androidSDL&#xff09;AndroidSDL Github 三、导入头文件和源文件&#xff0c;修改android.mk文件 3.1、在jni目录下创建SDL2文件…

腾讯云服务器可用区是什么意思?

腾讯云服务器可用区是什么意思&#xff1f;云服务器可用区如何选择&#xff1f;可用区是指在同一个地域内电力和网络相互独立的区域&#xff0c;可用区可以做到故障隔离&#xff0c;所以可用区存在的意义在于构建高可用、高容灾应用&#xff0c;将应用部署在不同可用区内&#…

爬虫基础之爬虫的基本介绍

一、爬虫概述 爬虫又称网络蜘蛛、网络机器人&#xff0c;网络爬虫按照系统结构和实现技术&#xff0c;大致可以分为以下几种类型&#xff1a; 通用网络爬虫&#xff08;Scalable Web Crawler&#xff09;&#xff1a;抓取互联网上所有数据&#xff0c;爬取对象从一些种子 URL…

腾讯云服务器可用区是什么意思?可用区选择方法

腾讯云服务器可用区是什么意思&#xff1f;云服务器可用区如何选择&#xff1f;可用区是指在同一个地域内电力和网络相互独立的区域&#xff0c;可用区可以做到故障隔离&#xff0c;所以可用区存在的意义在于构建高可用、高容灾应用&#xff0c;将应用部署在不同可用区内&#…

【2024全新版】程序员必会英语词汇表

“我英语不好可以学编程吗&#xff1f;” 相信这个问题&#xff0c;困扰着太多想学习编程&#xff0c;但英文不好的同学。 学习编程&#xff0c;常用的单词就那么多&#xff0c;只要把常见的单词学会&#xff0c;你的代码就能写的很6&#xff0c;英 语和编程的关系就是这么纯…

市场研究报告:量子计算将颠覆银行业!

&#xff08;图片来源&#xff1a;网络&#xff09; 量子银行将对金融体系产生重大影响&#xff0c;它在量子计算和区块链的基础上建立了一个更快的支付机制&#xff0c;并且通过消除传统点对点支付中常见的中间人&#xff0c;降低了运营成本。 量子计算及其运作机制 中东地区…

利用ffmpeg实现rtmp和rtsp推流

环境说明 windows11 : ffmpeg VLC Linux Unbuntu20.04 : SRS MediaMTX 可选&#xff1a;GStreamer win11下载ffmpeg和ffplay ffmpeg官网 添加环境变量&#xff1a;添加ffmpeg/bin所在的路径。 D:\ffmpeg\ffmpeg-master-latest-win64-lgpl-shared\bin win11查看本机电脑的设备…

JRebel

JRebel 下载&#xff1a; 1.在idea 直接下载 但版本不好控制 2.仓库下载地址&#xff1a;https://plugins.jetbrains.com/plugin/4441-jrebel-and-xrebel/versions/stable 注意版本&#xff1a;2022 .4.1 激活&#xff1a; 打开地址&#xff1a;https://jrebel.qekang.com/ …

英伟达真是赢麻了,深夜推出最强AI芯片霸场 | 百能云芯

10月14日凌晨&#xff0c;英伟达在2023年全球超算大会&#xff08;Supercomputing Conference&#xff0c;SC&#xff09;上正式宣布&#xff0c;升级旗舰AI芯片&#xff0c;推出全新的H200芯片&#xff0c;以处理更强大的人工智能系统。包括亚马逊的AWS、Alphabet的Google Clo…

CDP体系化建设1-CDP综述

前言 从CRM到DMP&#xff0c;再到CDP的横空出世&#xff0c;数据产品领域推陈出新的速度也挺快的。 而了解CDP的人可能会说&#xff0c;CDP和BI一样&#xff0c;糅杂了太多东西&#xff0c;都不知道如何概括。 在我看来&#xff0c;CDP也是一个看似简单&#xff0c;但是需要借助…

MYSQL存储引擎和索引

存储引擎 InnoDB&#xff08;默认&#xff09; 存储引擎的对比 MYISAM被MangoDB替代了 MEMORY被Redis替代了 索引 是一种高效获取数据的数据结构 索引结构 二叉树&#xff0c;红黑树&#xff08;都不合适&#xff09; B树 插入超过5个数&#xff0c;会从中间分裂 B树 …

Qt高级--(2)自定义标题栏

自定义标题栏 功能点 1.标题栏中最外层布局器使用水平布局器。 2.导航按钮、工具按钮和窗口功能按钮都是用水平布局器&#xff0c;边距和间隔可根据实际情况设置。 3.编写 QSS 样式&#xff0c;并将样式设置到窗口控件中。 4.实现最小化、最大化和关闭窗口按钮功能。 5.实现鼠…