相交链表~

news2024/11/27 10:28:31

题目描述

给你两个单链表的头节点 headAheadB,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null。图示两个链表在节点 c1 开始相交

题目数据保证整个链式结构中不存在环。注意,函数返回结果后,链表必须保持其原始结构 。

解题思路

暴力求解

在A链表中遍历每一个结点,去B链表中依次找一遍,但是这种方法的时间复杂度为O(N^2),因此,这种方法想必不太好,就不写代码实现了。

优雅解法

我们可能会这样想,如果在交点前同样距离远的位置同时开始遍历两个链表,那么在接下来的遍历过程中肯定会遍历到同一个结点,当第一次遍历到同一个结点时,那么这个结点就必然是交点。那么问题来了,我们刚才的假设是在交点前同样距离远的位置同时开始遍历两个链表,那么怎么才能做到这样呢?这两个链表的长度很可能是不一样的。我们这样想,分别遍历A、B这两个链表,同时计算这两个链表的长度,如果最终遍历到同一个结点,那么这两个链表必然相交,因此我们也可以计算出这两个链表长度的差值(假设为dif)。得到的这个差值很关键,我们让较长的链表先开始走dif步,然后两个链表再同时继续遍历,当遍历到同一个结点时,这个结点就是交点。

实现代码如下:

struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) 
{
    struct ListNode* curA=headA;
    struct ListNode* curB=headB;

    int sizeA=1;
    int sizeB=1;

    while(curA->next)
    {
        curA=curA->next;
        sizeA++;
    }
    while(curB->next)
    {
        curB=curB->next;
        sizeB++;
    }
    //判断相交
    if(curA != curB)
        return NULL;
    int dif=abs(sizeA-sizeB);
    curA=headA;
    curB=headB;
    //长的先走dif步
    if(sizeA > sizeB)
    {
        while(dif--)
        {
            curA=curA->next;
        }
    }
    else
    {
        while(dif--)
        {
            curB=curB->next;
        }
    }
    //一起走
    while(curA != curB)
    {
        curA=curA->next;
        curB=curB->next;
    }

    return curA;  
}

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

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

相关文章

文本标注工具doccano 中上传dataset无法成功

问题描述 文本标注工具doccano 中上传dataset无法成功,一直处于加载界面 解决方法 没有执行这个方法 doccano task

CorelDRAW2023绿色版免安装

我们都知道最新的画笔库和画笔搜索:CorelDRAW 2023中新增了最新的画笔库和画笔搜索功能,使用者能够轻松查找和应用各种画笔和笔刷。根据软件大数据显示 CorelDRAW? Graphics Suite 专为提高您的工作效率而设计,受到全球数百万图形专业人员和…

GEO地图数据分布处理

需求 已知访问用户经纬度数据,根据经纬度统计每个省的访问总数 地区经纬度分布表 CREATE TABLE area_geo (id int(11) NOT NULL,name varchar(250) NOT NULL COMMENT 地区名,ext_name varchar(255) NOT NULL COMMENT 地区扩展名,geo geometry NOT NULL COMMENT 地…

【修车案例】一波形一案例(7)

背景介绍:由于间歇性短路导致车厢内的照明灯不亮了,客户自己购买了廉价保险丝替换原装10A保险丝。但是线束却发生了着火事故,这条线束从车厢内保险丝盒 一直延伸到遮阳板处的梳妆灯。短路的原因后面确定是梳妆灯组件故障,但是客户…

PHP网站源码 知识付费分站代理自助下单系统花粥商城放墙带知识付费模版

花粥商城,自带防墙,本人一直在用,没有被墙过,自带知识付费模版美化版,用户登录的页面也很好看 上传商城源码,再把知识付费模版上传到根目录 访问域名,后台地址:域名/admin 登录账…

关于炒股融资的条件,3个你不知道的小知识

随着投资者对股市的关注度不断提高,炒股融资成为了常见的投资方式,但是很多投资者对炒股融资的条件了解不够。下面给大家介绍三个你可能不知道的小知识。 融资比例的计算方式 融资比例指的是投资者可以借的资金比例,其计算方式是融资金额除以…

库存预占架构升级方案设计-交易库存中心

背景介绍  伴随物流行业的迅猛发展,一体化供应链模式的落地,对系统吞吐、系统稳定发出巨大挑战,库存作为供应链的重中之重表现更为明显。近三年数据可以看出:  接入商家同比增长37.64%、货…

【广州华锐互动】蔬菜生鲜运输3D虚拟仿真实验系统

随着科技的不断发展,现代农业已经逐渐摆脱了传统的生产方式,转向了更加智能化、自动化的方向。在这个过程中,农场品运输作为农业生产的重要环节,其效率和安全性直接关系到农产品的质量和市场竞争力。为了解决这一问题,…

GPT-4.0网页平台-ChatYY

ChatYY的优势: 1. 支持大部分AI模型,且支持AI绘画: 2. 问答响应速度极快: 3. 代码解析: 4. 支持文档解读: 5. PC、移动端均支持: 访问直达:ChatYY.com

SOME/IP 协议介绍(二)

1. SOME/IP header 出于互操作性的原因,所有SOME/IP的实现都应具有相同的标头布局如图1中显示。字段按传输顺序呈现,即左上方的字段首先进行传输。在接下来的章节中,将描述不同的标头字段及其用途。 1.1. IP地址/端口号 图1中的布局显示了在…

Vue3.0 声明式导航,编程式导航,路由,路由拦截案例

项目结构 App.vue&#xff1a;根组件 <template><div><router-view></router-view><Tabbar></Tabbar></div> </template> <script setup> import Tabbar from ../src/views/Tabbar.vue; //底部选项卡 import Home from…

Linux快速搭建网站,并利用内网穿透实现宝塔面板的公网访问

文章目录 前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面 前言 宝塔面板作为简单好用的服务器运维管理面板&#xff0c;它支持Linux/Windows系统&#xff0c;我们可用它来一键配置LAMP/LNMP环境、网站、数据库、FTP等&…

什么是浏览器指纹?指纹浏览器如何避免浏览器指纹的追踪识别?

在做独立站跨境电商的过程中&#xff0c;海外社交媒体平台已成为我们必不可少的交易渠道。但是&#xff0c;由于各大平台对账号管理极其严格&#xff0c;对账户进行严密监控也成为了常态。这当然与浏览器指纹识别有关&#xff0c;今天龙哥就给大家科普一下什么是浏览器指纹&…

TikTok文学探秘:短视频背后的故事之美

在数字时代的冲击下&#xff0c;传统的娱乐形式正经历着翻天覆地的变革。社交媒体平台正在催生新的艺术表达形式&#xff0c;其中TikTok以其短视频分享功能引领了这一浪潮。 然而&#xff0c;TikTok不仅仅是短视频的集结地&#xff0c;它也是文字、情感和故事的沃土。本文将深…

Python - Windows下使用Python脚本同步一个文件夹下的所有文件到另一个文件夹下

Python同步文件 在Windows下使用Python脚本同步一个文件夹下的所有文件到另一个文件夹下 示例代码 import logging import os import shutildef sync_files(src_file_path, dst_dir_path, exclude_list):try:if not os.path.exists(src_file_path):os.makedirs(src_file_pat…

ER图理论知识掌握了吗?新手必看!

在数据库设计和管理中&#xff0c;ER图&#xff08;Entity-Relationship Diagram&#xff09;是一个不可或缺的工具。它以图形的方式呈现了数据实体之间的关系&#xff0c;为数据库设计和维护提供了重要的帮助。无论你是数据库新手还是有经验的专业人士&#xff0c;了解ER图的理…

【hcie-cloud】【4】华为云Stack规划设计之华为云Stack标准组网【中】

文章目录 前言、华为云Stack交付综述华为云Stack标准组网标准组网架构HCS标准组网架构单核心VS双核心组网二层组网VS三层组网 单核心和双核心组网单核心组网设计和配置单核心组网 - 计算节点2网口单核心组网 - 计算节点4网口单核心组网 - 计算节点6网口单核心架构 - 多Region组…

Android T窗口动画显示和退出流程(更新中)

序 如何创建一个窗口动画&#xff1f;我们通过先从APP创建一个窗口&#xff0c;以这个窗口的创建过程的窗口动画为例 这个demo就是点击BUTTON显示窗口&#xff0c;点击CLOSE WINDOW关闭窗口&#xff0c;下面简述关键代码 //定义WindowManager和LayoutParams private Window…

小米智能电视投屏方法

小米智能电视也提供了投屏功能。 使用遥控器&#xff0c;在应用中找到它&#xff0c;点击进入。 小米电视支持windows笔记本&#xff0c;macbook笔记本&#xff0c;iphone手机&#xff0c;安卓手机投屏。 windows笔记本投屏 在投屏应用中找到windows投屏&#xff0c;选中开…

统信UOS_麒麟KYLINOS创建网页桌面快捷方式

原文链接&#xff1a;统信UOS/麒麟KYLINOS创建网页桌面快捷方式 hello&#xff0c;大家好啊&#xff0c;今天给大家带来一篇使用命令行在统信UOS/麒麟KYLINOS创建网页桌面快捷方式的文章&#xff0c;主要用于构建云桌面模板及镜像模板的时候使用&#xff0c;欢迎大家浏览分享转…