力扣-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’ 解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。 从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,6,1,8,4,5]。 在 A 中,相交节点前有 2
个节点;在 B 中,相交节点前有 3 个节点。 — 请注意相交节点的值不为 1,因为在链表 A 和链表 B 之中值为 1 的节点 (A
中第二个节点和 B 中第三个节点) 是不同的节点。换句话说,它们在内存中指向两个不同的位置,而链表 A 和链表 B 中值为 8 的节点 (A
中第三个节点,B 中第四个节点) 在内存中指向相同的位置。

示例 2:
在这里插入图片描述

输入:intersectVal = 2, listA = [1,9,1,2,4], listB = [3,2,4], skipA = 3,
skipB = 1 输出:Intersected at ‘2’ 解释:相交节点的值为 2 (注意,如果两个链表相交则不能为 0)。
从各自的表头开始算起,链表 A 为 [1,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 。

思路:
创建两个指针,一个指针为node1指向headA,一个指针为node2指向headB,node1和noed2一起遍历,谁为空了就指向另一个链表,继续遍历,直到node1=node2结束遍历
请添加图片描述

注意:
我一开始写代码没加else,如果不加的话,就会跳过头结点,
直接next了

public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {ListNode node1=headA;ListNode node2=headB;if(headA==null||headB==null){return null;}while(node1!=node2){if(node1==null){node1=headB;}  else{node1=node1.next;}if(node2==null){node2=headA;} else{node2=node2.next;}}return node1;}
}

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

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

相关文章

ARTS Week 20

Algorithm 本周的算法题为 1222. 可以攻击国王的皇后 在一个 下标从 0 开始 的 8 x 8 棋盘上,可能有多个黑皇后和一个白国王。 给你一个二维整数数组 queens,其中 queens[i] [xQueeni, yQueeni] 表示第 i 个黑皇后在棋盘上的位置。还给你一个长度为 2 的…

【JVM】字节码指令 invokevirtual

在Java虚拟机(JVM)中,invokevirtual 是一个字节码指令,用于调用对象实例的方法。它的主要作用是执行对象的虚方法调用,遵循Java语言中的动态分派机制。 例如,假设我们有以下Java代码: Java 1…

AI与广告创意:大模型在广告生成中的应用与挑战

AI与广告创意:大模型在广告生成中的应用与挑战 摘要: 本文将探讨AI大模型在广告创意生成中的应用,并分析其面临的挑战。 引言: 在当今信息爆炸的时代,广告创意生成的重要性不言而喻。广告创意需要吸引目标受众的注…

多维时序 | Matlab实现VMD-CNN-BiLSTM变分模态分解结合卷积神经网络结合双向长短期记忆神经网络多变量时间序列预测

多维时序 | Matlab实现VMD-CNN-BiLSTM变分模态分解结合卷积神经网络结合双向长短期记忆神经网络多变量时间序列预测 目录 多维时序 | Matlab实现VMD-CNN-BiLSTM变分模态分解结合卷积神经网络结合双向长短期记忆神经网络多变量时间序列预测预测效果基本介绍程序设计参考资料 预测…

stm32是用标准库还是hal库?

我大学几年一直都是使用标准库,然后17年毕业第一份工作转为HAL库,主要也是公司需求没办法。然后之后的数年我都是建议转HAL库,并不是这个库有多好,相反小问题很多,但是有一个,这是官方一直在开发维护的库&a…

软件开发秘籍:打造高效的分支管理策略

版本控制策略:如何制定合理的分支管理策略 引言 版本控制是软件开发中至关重要的一环,而合理的分支管理策略则是版本控制成功的关键。本文将介绍如何制定合理的分支管理策略,并通过实际案例和技巧,帮助读者更好地理解和应用。 …

SpringBoot3快速入门

目录 一、快速创建项目 二、手动创建一个工程 一、快速创建项目 1、使用官网提供的spring组件创建一个springboot3工程,springboot3要使用JDK17以上的版本 选择配置点击finish,刷新maven 创建一个controller层,写一个demo,点击运…

学习vue3第四节(ref以及ref相关api)

主要记录以下api:ref()、isRef()、unref()、 shallowRef()、triggerRef()、customRef() 1、ref() 定义 接受一个内部值,返回一个响应式的、可更改的 ref 对象,此对象只有一个指向其内部值的属性 .value,.value属性用于追踪并且存…

二十、HTML

一、什么是HTML 超文本标记语言&#xff0c;不是一种编程语言&#xff0c;而是一种标记语言&#xff0c;描述网页的语言&#xff0c;HTML使用标签描述网页中图片、文本、音乐、视频、超链接等。 二、常用标签 1、标题标签 <h1>一级标题</h1> 1-6 2、段落标签<p&…

Github 2024-03-13 C开源项目日报 Top10

根据Github Trendings的统计,今日(2024-03-13统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量C项目10C++项目1Curl:用于传输数据的命令行工具和库 创建周期:5067 天开发语言:C协议类型:OtherStar数量:32994 个Fork数量:6208 次关注人…

vscode使用npm命令无反应,而终端可以的解决办法

如若你遇到这种情况 使用命令 get-command npm 去下面这个路径把它删掉就可以了

在linux中如何后台运行java项目(详细)

目录 1.查看是否安装有jdk环境 2.将打包好的jar上传到linux服务器上 3.运行java程序 直接运行&#xff1a; 使用 & 使用 nohup & 扩展知识 1.查看是否安装有jdk环境 java -version 如果可以查看到jdk版本 &#xff0c;那就代表环境配置好了 2.将打包好的jar上…

Java JUC 笔记(2)

Java JUC 笔记&#xff08;2&#xff09; 锁框架 JDK5以后增加了Lock接口用来实现锁功能&#xff0c;其提供了与synchronized类似的同步功能&#xff0c;但是在使用时手动的获取和释放锁 Lock和Condition锁 这里的锁与synchronized锁不太一样&#xff0c;我们可以认为是Loc…

【硬件工程师面经整理30_工艺现状】

请描述一下国内的工艺现状 工艺水平&#xff1a;中国的器件工艺水平在不断提高&#xff0c;已经可以制造出高性能、高可靠性的器件产品。在集成电路领域&#xff0c;中国已经具备了一定的制造能力和产业规模&#xff0c;能够生产一些中低端的芯片产品。在光电器件、传感器、功…

【YOLOv9】训练模型权重 YOLOv9.pt 重新参数化轻量转为 YOLOv9-converted.pt

【YOLOv9】训练模型权重 YOLOv9.pt 重新参数化轻量转为 YOLOv9-converted.pt 1. 模型权重准备2. 模型重新参数化2.1 文件准备2.2 参数修改2.3 重新参数化过程 3. 重新参数化后模型推理3.1 推理超参数配置3.2 模型推理及对比 4. onnx 模型导出&#xff08;补充内容&#xff09;4…

Java开发从入门到精通(一):Java 数据库编程

三、Java 数据库编程 JDBC 基础&#xff1a;连接数据库、执行 SQL 查询 使用 JDBC 操作数据库 数据库连接池和事务处理 数据库基础知识&#xff1a; 数据库概念和模型 SQL 语言 关系型数据库架构 JDBC 编程&#xff1a; JDBC 概述和工作原理 连接数据库 执行 SQL 查询和更新 处…

蓝桥杯第1595题——和与乘积

题目描述 给定一个数列 A(a1​,a2​,⋯,an​)&#xff0c;问有多少个区间 [L,R] 满足区间内元素的乘积等于他们的和。 输入描述 输入第一行包含一个整数 n&#xff0c;表示数列的长度。 第二行包含 n 个整数&#xff0c;依次表示数列中的数 a1​,a2​,⋯,an​。 输出描述 …

java面试题(持续更新.. ...)

JDK和JRE和JVM区别 JVM是运行字节码的虚拟机&#xff0c;JRE在JVM的基础上添加了基本的类库&#xff0c;JDK在JRE的基础上添加了一些编译的工具(例如&#xff1a;javac等)… … java和c的区别 java和c都是面向对象都支持继承&#xff0c;但是c是多继承&#xff0c;java是单继承…

【硬件工程师面经整理31_非技术问答(主管面)】

文章目录 为什么要来XX对这个岗位工作的了解你期待一个怎么样的工作环境工作强度大/是否愿意加班&#xff0c;怎么看压力大的时候怎么办&#xff1f;个人优势/性格优缺点。团队协作你觉得最重要的是什么未来有什么职业规划如果都给你发了offer你会怎么选&#xff1f;期待的年薪…

安塔利斯升级php8

1、includes/classes/class.Database.php 255行 multi_query方法加返回类型 :bool query方法加返回类型&#xff1a;: mysqli_result|bool 2、includes/classes/class.Session.php on line 91 Optional parameter $planetID declared before required parameter $dpath is…