LeetCode2.07链表相交

2.07链表相交

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

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

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

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

示例 1:

输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA
= 2, skipB = 3 输出:Intersected at ‘8’ 解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。 从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。 在 A 中,相交节点前有 2
个节点;在 B 中,相交节点前有 3 个节点。 示例 2:

输入:intersectVal = 2, listA = [0,9,1,2,4], listB = [3,2,4], skipA = 3,
skipB = 1 输出:Intersected at ‘2’ 解释:相交节点的值为 2 (注意,如果两个链表相交则不能为 0)。
从各自的表头开始算起,链表 A 为 [0,9,1,2,4],链表 B 为 [3,2,4]。 在 A 中,相交节点前有 3 个节点;在 B
中,相交节点前有 1 个节点。 示例 3:

输入:intersectVal = 0, listA = [2,6,4], listB = [1,5], skipA = 3, skipB
= 2 输出:null 解释:从各自的表头开始算起,链表 A 为 [2,6,4],链表 B 为 [1,5]。 由于这两个链表不相交,所以 intersectVal 必须为 0,而 skipA 和 skipB 可以是任意值。 这两个链表不相交,因此返回 null 。

提示:

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


思路一

借鉴大神操作,追击相遇问题
太巧妙了

如果两个链表相交,两个指针最终会在相交节点相遇,因为它们遍历的总长度是相同的(先走完一个链表,再走另一个链表的剩余部分)。
如果两个链表不相交,两个指针最终会同时指向 null,这是因为它们走过的路径长度相同,但是都走完了两个链表,最后都指向了 null。

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode(int x) {*         val = x;*         next = null;*     }* }*/
public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {ListNode A = headA;ListNode B = headB;//当A B不相遇时while(A != B){//A如果不为空,A向后走否则将A指向B链首A = A != null ? A.next : headB;//B如果不为空,B向后走,否则将B指向A的链首B = B != null ? B.next : headA;}//返回重合点return A;}
}

思路二

比较麻烦,但是更加容易想到哦

  1. 找出A ,B链表的长度差并将两条链表尾部对齐
  2. 假设A长B短,那么从B的开头,A的(lenA - lenB)位置开始遍历
  3. AB同时向后移动,直到AB找到相同的后缀
  4. 找不到就直接返回null
    如图对齐
/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode(int x) {*         val = x;*         next = null;*     }* }*/
public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {//找出A ,B链表的长度差并将两条链表尾部对齐//假设A长B短,那么从B的开头开始遍历//AB同时向后移动,直到AB找到相同的后缀//找不到就直接返回nullListNode A = headA, B = headB;int lenA = 0 , lenB = 0;//寻找A的长度while(A != null){lenA ++;A = A.next;}//寻找B的长度while (B != null){lenB ++;B = B.next;}//重置A, B指针为初始位置A = headA;B = headB;//让A为最长链表的头,lenA为其长度if(lenB > lenA){//交换A ,B指针位置(交换三步走)ListNode tmpNode = A;A = B;B = tmpNode;//交换lenA ,lenBint tmp = lenA;lenA = lenB;lenB = tmp;}//求A B长度差int gap = lenA - lenB;//让A和B在同一起点上while (gap > 0){A = A.next;--gap;}//当A不为空时,遇到相同则返回while (A != null){if(A == B){return A;}A = A.next;B = B.next;}return null;}
}

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

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

相关文章

Linux中排查磁盘存储不足问题Centos7.9

操作系统Centos7.9 df -h # 命令查看磁盘空间 du -ah --max-depth1 / # 查看根目录下各个文件占用情况max-depth表示目录的深度。 查看某个目录du -bsh命令&#xff0c;看一下常用的usr目录大小 du -bsh /usr 进入目录用find命令找到大于100M文件find . -size 100M&#xff…

vue实现图片框选标注

前言 前端有一个需求&#xff0c;对上传的图片进行检测识别&#xff0c;通过返回的接口坐标数据&#xff0c;对图片的某些区域进行框选并标注。如图&#xff1a; 开始 1、上传功能使用elementui的upload插件&#xff1b; 2、在图片上进行标注功能是元素定位在图片上层&#x…

Java - 探究Java优雅退出的两种机制

文章目录 概述Java优雅停机_ ShutdownHook 机制步骤Code Java优雅停机_ 信号量机制SignalHandler 工作原理使用步骤Linux支持的信号量根据操作系统选择信号量Code 注意事项 概述 在Linux上通过kill -9 pid方式强制终止进程的副作用&#xff0c;这种方式虽然简单高效&#xff0…

SpringBoot项目中同时支持https和http协议

实用干货&#xff01;看壹哥如何在SpringBoot项目中同时支持https和http协议_springboot http htpps共存-CSDN博客

网络学习DAY3--TCP并发

思路一&#xff1a;多线程并发 缺点&#xff1a;资源浪费过大&#xff0c;且能实现的并发量有限。 思路二&#xff1a;IO通信 1.阻塞IO 没有任务时&#xff0c;挂起任务&#xff0c;节省资源&#xff0c;提高效率 2.非阻塞IO 未收到数据时一直执行&#xff0c;效率很低 …

小红书素人投放计划怎么做?

小红书素人投放是很多品牌在小红书推广打响的第一枪&#xff0c;素人铺量在小红书投放&#xff0c;可以奠定品牌在小红书的声量&#xff0c;小红书素人投放计划怎么做&#xff1f;前期规划好一切&#xff0c;才能在后期让我们的推广爆发出更好的效果。接下来伯乐网络传媒就来给…

【压缩包技巧】如何把rar文件压缩为zip格式?

想要将rar文件压缩为zip格式&#xff0c;其实就是压缩包格式进行转换&#xff0c;今天和大家分享三个rar压缩包改成zip格式的方法&#xff0c;希望能够帮助到大家&#xff01; 方法一&#xff1a; 直接修改rar压缩包的后缀名变为zip&#xff0c;就可以修改压缩包文件格式了 …

MySQL 排错 - blocked because of many connection errors

文章目录 说明1. host_cache2. 问题复现2.1 未调用 close()2.2 MySQL 协议握手错误 3. 解决方法 说明 前几天收到了研发同学反馈&#xff0c;测试环境的数据库出现了无法连接的情况&#xff0c;并附上了报错&#xff0c;本篇文章分析该异常的原因。 ERROR 1129 (HY000): Host …

揭秘Google Gemini:AI界的多模态革命者与ChatGPT-4的较量

在人工智能的快速发展浪潮中&#xff0c;Google DeepMind的最新力作——Gemini&#xff0c;以其多模态的超凡能力&#xff0c;正引领着AI技术的新一轮革命。本文将深入探讨Gemini的核心特性、不同版本的特点&#xff0c;以及它与ChatGPT-4的对比优势和差异。 一、Gemini简介 A…

Java SE入门及基础(35)

接口 1. 概念 在软件工程中&#xff0c;软件与软件的交互很重要&#xff0c;这就需要一个约定。每个程序员都应该能够编写实现这样的约定。接口就是对约定的描述。 In the Java programming language, an interface is a reference type, similar to a class, that can con…

float32 float16 bfloat16 推理训练GPU速度和内存调研

概念&#xff1a; 参考&#xff1a;Accelerating Large Language Models with Mixed-Precision Techniques - Lightning AI 3种数量类型表示的数据范围不一样&#xff0c;以float32为例其中有1个符号位&#xff0c;8位表示指数&#xff0c;23位表示尾数 标准训练推理是用的fl…

团体程序设计天梯赛 L2-013 红色警报(连通分量)

L2-013 红色警报 分数 25 战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序&#xff0c;当失去一个城市导致国家被分裂为多个无法连通的区域时&#xff0c;就发出红色警报。注意&#xff1a;若该国本来就不完全连通&#xff0c;是分裂的k个区域&#xff0c…

eclipse maven 项目导入报错

错误&#xff1a;Internal compiler error: java.lang.NullPointerException at org.eclipse.jdt.internal.compiler.apt.dispatch.AnnotationDiscoveryVisitor 环境&#xff1a;eclipse Kepler Service Release 2 ,JDK1.7 解决办法&#xff1a;编码不对&#xff0c;修改

前端自带的base64转化方法

前端html的base64使用方法window.btoa()和window.atob()_html用window.btoa();-CSDN博客

ubuntu20.04缺少libssl.so.1.0.0的解决方法

Index of /ubuntu/pool/main/o/openssl 使用一下下载命令&#xff0c;注意如果提示安装包不存在&#xff0c;可以从上述链接中找到合适的安装包&#xff0c;下载安装 wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.0.0_1.0.2g-1ubuntu4.20_amd64.debsu…

指令调用模板

也就是这边指令通过id和map会定位到一个结构体&#xff0c;然后这个结构再赋值两个成员&#xff0c;一个是函数一个是指令类型&#xff0c;然后这个函数是模板的实例化 使用的时候就传进去&#xff0c;这只是参数&#xff0c;最开始初始化的时候模板就已经实例化了。然后关于模…

为什么美国硅谷作为服务器托管的首选地?

在数字化时代&#xff0c;服务器托管已成为企业运营不可或缺的一部分。而美国硅谷作为全球科技创新的摇篮&#xff0c;其服务器托管服务备受全球企业青睐。那么&#xff0c;为什么众多企业选择美国硅谷作为服务器托管的首选地呢? 硅谷拥有得天独厚的地理位置和网络基础设施。硅…

[HackMyVM]Quick 2

kali:192.168.56.104 主机发现 arp-scan -l # arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:d2:e0:49, IPv4: 192.168.56.104 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.56.1 0a:00:27:00:00:05 (Un…

若依框架的使用

文章目录 1,前端2,后端3,数据库4,测试 1,前端 2,后端 3,数据库 4,测试

Vision Transformers的注意力层概念解释和代码实现

2017年推出《Attention is All You Need》以来&#xff0c;transformers 已经成为自然语言处理(NLP)的最新技术。2021年&#xff0c;《An Image is Worth 16x16 Words》&#xff0c;成功地将transformers 用于计算机视觉任务。从那时起&#xff0c;许多基于transformers的计算机…