相交链表(Leetcode)

 题目分析:

. - 力扣(LeetCode)

相交链表:首先我想到的第一个思路是:如图可知,A和B链表存在长度差,从左边一起遍历链表不好找交点,那我们就从后面开始找,但是这是单链表,没有 prev 指针,所以只能反转链表 A、B。反转之后再从A、B头结点开始就可以找到相遇点,但是题目要求我们不能改变链表的结构,所以此方法不行。

方法一:

思路:

 ①当链表有一个为空,或者两个都为空的时候,直接返回NULL。

 ②因为链表存在差值,结点个数不同,不能一起遍历,所以我们可以求出A和B各自的结点个数,然后求出差值。

③差值有了之后,我们可以让长的链表先走差值步,相对于抹掉了差值。

④最后A、B链表一起走,如果地址相等就表示相遇了,就返回交点处的地址,如果没有相遇,就返回NULL

struct ListNode* getIntersectionNode(struct ListNode* headA,
                                     struct ListNode* headB) {

    struct ListNode* curA = headA;
    struct ListNode* curB = headB;
    if (curA == NULL || curB == NULL)
        return NULL;
    //求链表A、B各自的长度
    int la = 0;
    int lb = 0;
    while (curA) {
       curA = curA->next;
        ++la;
    }
    while (curB) {
        curB = curB->next;
        ++lb;
    }
    //找到两个链表中较长的那个
    struct ListNode* longest = headA;
    struct ListNode* shortest = headB;
    if (la < lb) {
        longest = headB;
        shortest = headA;
    }
    //求出差值,然后先让长的链表走完差值
    int gap = abs(la - lb);
    while (gap--) {
        longest = longest->next;
    }
    //同时出发,直到相遇,否则没有相遇
    while (longest) {
        if (longest == shortest)
            return longest;
        longest = longest->next;
        shortest = shortest->next;
    }
    return NULL;
}

 

方法二:

思路:

①当链表有一个为空,或者两个都为空的时候,直接返回NULL。

②相当于两个指针在一个路线上走、走的路程都是一样的

A先走完自己的路程,然后去走B的路程

B先走完自己的路程,然后去走A的路程

A和B走到路一样长

如果存在相遇点,A和B必定会相遇 (如果不是很明白可以对着代码,画图去理解一下)

如果不存在相遇点,就在NULL处相遇

struct ListNode* getIntersectionNode(struct ListNode* headA,
                                     struct ListNode* headB) {

     if (headA==NULL || headB==NULL)
    {
        return NULL;
    }
    struct ListNode* A = headA;
    struct ListNode* B = headB;
    while (A != B) {
        A = A ? A->next : headB; 
        B = B ? B->next : headA;
    }
    return A;
}

 

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

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

相关文章

惊天大瓜陈晓与陈妍希婚姻生变

惊天大瓜&#xff01;陈晓与陈妍希婚姻生变&#xff0c;疑似去年底已走向终点娱乐圈再次掀起波澜&#xff01;今日&#xff0c;知名狗仔曝光了一段视频&#xff0c;内容直指陈晓与陈妍希这对曾经的金童玉女疑似婚姻破裂。据悉&#xff0c;陈晓在去年底单方面向陈妍希提出了离婚…

AI 已经在污染互联网了。。赛博喂屎成为现实

大家好&#xff0c;我是程序员鱼皮。这两年 AI 发展势头迅猛&#xff0c;更好的性能、更低的成本、更优的效果&#xff0c;让 AI 这一曾经高高在上的技术也走入大众的视野&#xff0c;能够被我们大多数普通人轻松使用&#xff0c;无需理解复杂的技术和原理。 其中&#xff0c;…

Gin 详解

Gin 介绍 gin框架是一个基于go语言的轻量级web框架&#xff0c;它具有高效性、灵活性、易扩展性路由 gin框架使用的是定制版的httprouter 其路由原理是大量使用公共前缀的树结构&#xff0c;注册路由的过程就是构造前缀树的过程。 具有公共前缀的节点也共享一个公共父节点。…

【第19章】Vue实战篇之主页面

文章目录 前言一、代码1. 主界面代码2. App.vue 二、展示总结 前言 登录完成之后&#xff0c;应该自动跳转到主页面&#xff0c;接下来我们搭建主界面。 一、代码 1. 主界面代码 <script setup> import {Management,Promotion,UserFilled,User,Crop,EditPen,SwitchBut…

Linux搭建Minio单机环境

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; Linux搭建Minio单机环境 ⏱️ 创作时间&#xff1a; 2024年06月19日 目…

群辉DSM7下ZeroTier的安装

目录 一、起因 二、具体操作 1、添加组件源: 2、安装套件 3、开启ssh 4、连接ssh执行修补 5、手工启动ZeroTier 6、使用终端命令加入网络 7、审核通过该节点的加入 三、测试链接 1、PC端测试 2、手机APP测试 ZeroTier 是一款异地组网工具,它可以将不同网络环境的设…

鸿蒙开发通信与连接:【@ohos.bluetooth (蓝牙)】

蓝牙 说明&#xff1a; 本模块首批接口从API version 7开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 蓝牙模块提供了基础的传统蓝牙能力以及BLE的扫描、广播等功能。 导入模块 import bluetooth from ohos.bluetooth;bluetooth.enableBluet…

PCB设计隐藏的陷进

1、BGA芯片的开窗和过油设计。 加工工艺中&#xff0c;范式过孔都需要盖油设计&#xff0c;实心焊盘需要开窗设计&#xff0c;坚决不能盖油。 2、通孔设计的互联连通性 比如H3芯片的wifi设计&#xff0c;实际上是没有联通的&#xff0c;虽然四层板的中间层有焊盘&#xff0c;但…

复旦大学:将推出至少100门AI领域课程

B站&#xff1a;啥都会一点的研究生公众号&#xff1a;啥都会一点的研究生 最近AI圈又发生了啥&#xff1f; 复旦大学&#xff1a;将在下一个学年推出至少100门AI领域课程 复旦大学召开2024年招生培养政策发布会&#xff0c;公布今年本科招生培养政策亮点。从今年秋季学期开…

【黑马TS】学习资料Day4

五、在 React 中使用 TypeScript 现在&#xff0c;我们已经掌握了 TS 中基础类型、高级类型的使用了。但是&#xff0c;如果要在前端项目开发中使用 TS&#xff0c;还需要掌握 React、Vue、Angular 等这些库或框架中提供的 API 的类型&#xff0c;以及在 TS 中是如何使用的。 …

ARCGIS 如何对河流等线条图形进行Smooth处理——具有多个断点高阶版

1.线转点折点&#xff08;注意&#xff01;很重要&#xff0c;不是线转点&#xff09; 2.点转线步骤 ## 3 线的融合 2.1 新建Filed 》短精度类型》利用选择工具的 线文件。全选同一条河流点&#xff0c;进入Tabel的选择界面。给同一条河赋值同一个值。 大功告成&#xff01;…

upload-labs第十三关教程

upload-labs第十三关教程 第十三关一、源代码分析代码审计 二、绕过分析1&#xff09;0x00绕过a.上传eval.pngb.使用burpsuite进行拦截修改之前&#xff1a;修改之后&#xff1a;进入hex模块&#xff1a; c.放包上传成功&#xff1a; d.使用中国蚁剑进行连接 2&#xff09;%00绕…

amov无人机连接;+数据传输;啊啊啊啊啊

socket传输数据: 局域网连接 连接---通信(命令行直接;)--- 传输数据(socket)--传输内容:launch文件; qgc连接; 1.局域网下的通信 1.1 局域网 厂家提供的方式是通过Homer图数传工具(硬件)构建的amov局域网实现通信连接. 好处是通信距离足够长,支持150m;坏处是"局部&qu…

SpringBoot配置第三方专业缓存技术Redis

Redis缓存技术 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的内存中数据结构存储系统&#xff0c;通常用作数据库、缓存和消息中间件。它支持多种数据结构&#xff0c;如字符串、哈希表、列表、集合、有序集合等&#xff0c;并提供了丰富的功能和灵活的…

用Selenium自动化Web应用测试!

在开发和维护Web应用时&#xff0c;测试是确保应用正常运行的关键环节。手动测试不仅费时费力&#xff0c;而且容易出错。而通过使用Selenium&#xff0c;程序员可以轻松模拟用户交互、验证页面元素&#xff0c;从而自动化测试过程&#xff0c;提升测试效率和准确性。 解决的问…

【TB作品】MSP430G2553,单片机,口袋板, 多路温度巡回检测仪的设计

题7 多路温度巡回检测仪的设计 设计一个多路温度检测仪&#xff0c;共有8个测温点&#xff0c;每个点连续检测8次&#xff0c;以平均值代表该点温度&#xff0c;并轮流在LED显示器上显示。测试检测元件为铂热电阻Pt1000, 温度测量范围为100℃ ——500℃&#xff0c;测量精度为1…

用LoRA微调 Llama 2:定制大型语言模型进行问答

Fine-tune Llama 2 with LoRA: Customizing a large language model for question-answering — ROCm Blogs (amd.com) 在这篇博客中&#xff0c;我们将展示如何在AMD GPU上使用ROCm对Llama 2进行微调。我们采用了低秩适配大型语言模型(LoRA)来克服内存和计算限制&#xff0c;…

Chatgpt教我打游戏攻略

宝可梦朱 我在玩宝可梦朱的时候&#xff0c;我的同行队伍里有黏美儿&#xff0c;等级为65&#xff0c;遇到了下雨天但是没有进化&#xff0c;为什么呢&#xff1f; 黏美儿&#xff08;Goomy&#xff09;要进化为黏美龙&#xff08;Goodra&#xff09;&#xff0c;需要满足以下…

金蝶BI方案与奥威BI:智能、高效的数据分析组合

在当今数据驱动的时代&#xff0c;企业对于快速、准确、全面的数据分析需求日益增长。金蝶BI方案和奥威BI SaaS平台正是为满足这一需求而精心打造的智能数据分析工具。 方案见效快 金蝶BI方案以其高效的数据处理能力&#xff0c;能够快速地将海量数据转化为有价值的信息。通过…

港股全面大反攻即将开始!

港股三大指数高开高走&#xff0c;截至发稿&#xff0c;恒指涨2.87%。消费电子普遍开始盘整&#xff0c;但科网股迎来全面反弹&#xff0c;恒指在18000附近连续整固之后&#xff0c;今日似乎迎来了反转契机。 招银国际表示&#xff0c;回顾年初至今的中国互联网板块表现及行业…