160.相交链表

160.相交链表

    • 题目链接
    • 算法 = 双指针相向而行 & 题目特征 = 寻找两个数组(或链表)中的匹配项

 


题目链接

https://leetcode.cn/problems/intersection-of-two-linked-lists/

算法 = 双指针相向而行 & 题目特征 = 寻找两个数组(或链表)中的匹配项

我们需要找到两个链表的相交节点。

由于两个链表可能有不同的长度,且相交点之后的节点是完全重合的,我们需要对齐两个链表的长度,以确保在遍历过程中能够比较相同位置的节点。

拼接链表并不是为了匹配上相交点,而是为了对齐两个链表的长度,以便在遍历过程中能够比较相同位置的节点。

通过拼接链表(中间步骤的方法),我们可以保证两个链表在遍历时具有相同的长度(之所以使用这个方法,是因为有这个特征)。

这样,在遍历过程中,两个指针可以同时移动,比较相同位置的节点是否相等,以找到相交点。

拼接链表并不会改变原始链表的结构,它只是为了对齐两个链表的长度。

举个例子:

  • 链表 A:1 -> 2 -> 3 -> 4
  • 链表 B:5 -> 6 -> 7 -> 3 -> 4

在这个例子中,链表 A 和链表 B 在节点 3 处相交,之后的节点 3 和节点 4 是完全重合的。

拼接链表后:

  • 链表 A:1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 3 -> 4
  • 链表 B:5 -> 6 -> 7 -> 3 -> 4 -> 1 -> 2 -> 3 -> 4

通过拼接链表,我们可以在后续的遍历中比较相同位置的节点。

当两个指针分别从链表 A 和链表 B 的头部开始遍历,最终会在节点 3 处相遇,找到了相交点。

class Solution {
public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {if (headA == nullptr || headB == nullptr)return nullptr;ListNode *pA = headA, *pB = headB;while (pA != pB) {pA = pA == nullptr ? headB : pA->next;pB = pB == nullptr ? headA : pB->next;}return pA;}
};

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

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

相关文章

Spring cloud教程Gateway服务网关

Spring cloud教程|Gateway服务网关 写在前面的话: 本笔记在参考网上视频以及博客的基础上,只做个人学习笔记,如有侵权,请联系删除,谢谢! Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,…

redission分布式锁避坑指南

常见用法 RLock lock redisson.getLock("anyLock"); try{ // 1. 最常见的使用方法 //lock.lock(); // 2. 支持过期解锁功能,10秒钟以后自动解锁, 无需调用unlock方法手动解锁 //lock.lock(10, TimeUnit.SECONDS); // 3. 尝试加锁,最多等待3秒&#xff0c…

JS中null和undefined的区别

首先 Undefined 和 Null 都是基本数据类型,这两个基本数据类型分别都只有一个值,就是 undefined 和 null。 undefined 代表的含义是未定义,null 代表的含义是空对象。一般变量声明了但还没有定义的时候会返回 undefined,null主要…

使用HttpClient库的爬虫程序

使用HttpClient库的爬虫程序,该爬虫使用C#来抓取内容。 using System; using System.Net.Http; using System.Threading.Tasks; ​ namespace CrawlerProgram {class Program{static void Main(string[] args){// 创建HttpClient对象using (HttpClient client new…

Ubuntu更新apt-get安装镜像源

前往清华开源镜像站获取镜像链接 修改镜像源,打开配置文件,将镜像源链接粘贴到配置文件 sudo vim /etc/apt/sources.list更新软件列表到本地 sudo apt-get update更新所有软件(非必要) sudp apt-get upgrade

java入门,程序=数据结构+算法

一、前言 在学习java的时候,我印象最深的一句话是:程序数据结构算法,对于写java程序来说,这就是java的入门。 二、java基本数据结构与算法 1、数据类型 java中的数据类型8种基本数据类型: 整型 byte 、short 、int…

win7中安装node14和vue

下载并安装低版本node 13 到官网去找早期历史版本的 nodejs 13 msi格式即可,并一键安装,我安装在了 D:\Program Files\nodejs 目录下 https://nodejs.org/download/release/v13.14.0/ 下载高版本node 14 下载高版本的node zip包 https://nodejs.org/…

VMware打开centos黑屏解决方法汇总以及解决出现的bug(Centos7系统网络异常等)

VMware打开centos黑屏解决方法汇总 前言:一. VMware打开centos黑屏解决方法汇总一 .情况情况一:情况二情况三 二. 解决方法最简单的方法:一. 以管理员权限在命令行执行1. 管理员身份运行cmd2. 输入“netsh winsock reset”,回车3. 重启电脑即…

影视企业有哪些方式将视频文件快速海外跨国传输国内?

影视行业是一个高度国际化的行业,影视企业在跨国合作、制作、发行等方面有着强烈的需求。然而,影视企业在跨国文件传输方面也面临着诸多的问题和难题。视频文件通常具有较大的文件大小、多样的文件格式、高要求的文件质量等特点,这些特点使得…

激光雷达标定板如何提高激光雷达避免误判的精准度

激光雷达在提高自动驾驶的安全性方面具有重要作用。它通过高精度测量、避免误判、实时感知、适应不同环境和结合其他传感器等方式,为自动驾驶系统提供准确、可靠的感知数据,从而确保行驶的安全性和稳定性。 激光雷达可以通过以下方式避免误判&#xff1a…

web3 在React dapp中全局管理web3当前登录用户/智能合约等信息

上文 Web3 React项目Dapp获取智能合约对象我们在自己的前端dapp项目中链接获取到了 自己的智能合约 我们继续 我们还是先启动ganache环境 终端输入 ganache -d然后发布一下我们的智能合约 打开我们的合约项目 终端输入 truffle migrate --reset这样 我们的智能合约就部署到区…

Spring AOP基于XML方式笔记整理

XML AOP 加载流程 ClassPathXmlApplicationContext#refreshAbstractApplicationContext#obtainFreshBeanFactoryAbstractRefreshableApplicationContext#refreshBeanFactory创建DefaultListableBeanFactoryAbstractApplicationContext#loadBeanDefinitions(beanFactory)创建Xm…

MVCC详解

什么是MVCC? MVCC,即Multi-Version Concurrency Control (多版本并发控制)。它是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。 通俗的讲&am…

无显示器和网线安装树莓派4B Raspbian 操作系统

1、下载Raspbian镜像: 下载地址:Operating system images – Raspberry Pi 推荐预装软件带桌面的系统,点击download按钮,大概2.5G,漫长下载ing。下载完毕之后,解压得到一个后缀是img的镜像文件备用。 2、…

银河麒麟x86版、银河麒麟arm版操作系统编译zlmediakit

脚本 # 安装依赖 gcc-c.x86_64 这个不加的话会有问题 sudo yum -y install gcc gcc-c libssl-dev libsdl-dev libavcodec-dev libavutil-dev ffmpeg git openssl-devel gcc-c.x86_64mkdir -p /home/zenglg cd /home/zenglg git clone --depth 1 https://gitee.com/xia-chu…

OpenCV的绘图工具(rectangle、circle、line、polylines、putText)常用方法简介【C++的OpenCV 第十五课】

🎉🎉🎉 欢迎各位来到小白 p i a o 的学习空间! \color{red}{欢迎各位来到小白piao的学习空间!} 欢迎各位来到小白piao的学习空间!🎉🎉🎉 💖 C\Python所有的入…

Redo Log(重做日志)的刷盘策略

1. 概述 Redo Log(重做日志)是 InnoDB 存储引擎中的一种关键组件,用于保障数据库事务的持久性和崩溃恢复。InnoDB 将事务所做的更改先记录到重做日志,之后再将其应用到磁盘上的数据页。 刷盘策略(Flush Policy&#x…

基于CMFB余弦调制滤波器组的频谱响应matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1、CMFB余弦调制滤波器组原理 4.2、CMFB调制过程 4.3、CMFB特点 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ......................…

【go channel管道】

1.channel是什么 在Go语言中,Channel是一种用于在Goroutine之间进行通信的数据结构。它类似于队列,可以在一个Goroutine中将数据发送到Channel,然后在另一个Goroutine中接收这些数据。Channel提供了一种同步的方式,确保发送和接收…

深入浅出Django的MTV架构

在现代Web应用程序开发中,采用一种模式或架构以组织代码和功能是至关重要的。在Django中,这种模式被称为MTV模式,即模型(Model)、模板(Template)和视图(View)。尽管它与传…