【leetcode】力扣算法之相交链表【中等难度】

题目描述

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

图示两个链表在节点 c1 开始相交:
在这里插入图片描述
题目数据 保证 整个链式结构中不存在环。

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

自定义评测:

评测系统 的输入如下(你设计的程序 不适用 此输入):

intersectVal - 相交的起始节点的值。如果不存在相交节点,这一值为 0
listA - 第一个链表
listB - 第二个链表
skipA - 在 listA 中(从头节点开始)跳到交叉节点的节点数
skipB - 在 listB 中(从头节点开始)跳到交叉节点的节点数
评测系统将根据这些输入创建链式数据结构,并将两个头节点 headA 和 headB 传递给你的程序。如果程序能够正确返回相交节点,那么你的解决方案将被 视作正确答案 。

用例

输入: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 中第四个节点) 在内存中指向相同的位置。
在这里插入图片描述

输入: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 个节点。

在这里插入图片描述

输入: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
  • 1 <= m, n <= 3 * 104
  • 1 <= Node.val <= 105
  • 0 <= skipA <= m
  • 0 <= skipB <= n
  • 如果 listA 和 listB 没有交点,intersectVal 为 0
  • 如果 listA 和 listB 有交点,intersectVal == listA[skipA] == listB[skipB]

示例代码

解法1: 暴力破解
解法2:借助数组反向查找

var getIntersectionNode = function(headA, headB) {
    let temp=[];
    while(headA){
        temp.push(headA);
        if(headA.next){
            headA=headA.next;
        }else{
            break;
        }
    }
    let temp1=[];
    while(headB){
        temp1.push(headB);
        if(headB.next){
            headB=headB.next;
        }else{
            break;
        }
    }
    let res=null;
    let min=Math.min(temp.length,temp1.length);
    for(let i=0;i<min;i++){
        if(temp[temp.length-1-i]==temp1[temp1.length-1-i]){
            res=temp[temp.length-1-i];
        }else{
            break;
        }
    }
    return res;
};

在这里插入图片描述

解法3:奇怪的解法

var getIntersectionNode = function(headA, headB) {
    if(!headA || !headB) return null;
    let pA=Object.assign(headA);
    let pB=Object.assign(headB);
    while(pA!=pB){
          pA = pA == null ? headB : pA.next;
        pB = pB == null ? headA : pB.next;
    }
    return pA;
};

Tip:

解法千千万,不必拘泥于条条框框。能解决问题就是好算法

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

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

相关文章

【Qt开发】PyQt6--标签控件

标签控件 Qlabel设置标签文本文本的对齐方式为标签设置超链接为标签设置图片获取标签文本 Qlabel QLabel标签控件&#xff0c;用于显示用户不能编辑的文本&#xff0c;主要起提示的作用 设置标签文本 文本的对齐方式 通过这可以设置文本对齐方式 为标签设置超链接 勾选以上…

竞赛保研 基于深度学习的人脸性别年龄识别 - 图像识别 opencv

文章目录 0 前言1 课题描述2 实现效果3 算法实现原理3.1 数据集3.2 深度学习识别算法3.3 特征提取主干网络3.4 总体实现流程 4 具体实现4.1 预训练数据格式4.2 部分实现代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 毕业设计…

环境搭建 之 Ubuntu 安装

ubuntu-releases-20.04.6安装包下载_开源镜像站-阿里云ubuntu-releases-20.04.6安装包是阿里云官方提供的开源镜像免费下载服务&#xff0c;每天下载量过亿&#xff0c;阿里巴巴开源镜像站为包含ubuntu-releases-20.04.6安装包的几百个操作系统镜像和依赖包镜像进行免费CDN加速…

外汇天眼:放弃对波动的偏爱才能追逐趋势!

无论在熊市还是牛市中&#xff0c;市场上亏损者仍然和别的状态下一样多。 在趋势不明的情况下&#xff0c;我们盼望趋势的来临; 然而趋势真正形成之时&#xff0c;我们却仍然一无所获。 趋势表面上看对我们很重要&#xff0c;然而具体交易时却又难以利用&#xff0c;在具体交易…

乐理燥废笔记

乐理燥废笔记 文章目录 终止式小调音阶转调不协和和弦进行大小转调1251 1451转调我的霹雳猫阿诺三全音代理五声音阶又怎样和弦附录&#xff1a;压缩字符串、大小端格式转换压缩字符串浮点数压缩Packed-ASCII字符串 大小端转换什么是大端和小端数据传输中的大小端总结大小端转换…

IDEA中怎么用Postman?这款插件你试试

Postman是大家最常用的API调试工具&#xff0c;那么有没有一种方法可以不用手动写入接口到Postman&#xff0c;即可进行接口调试操作&#xff1f;今天给大家推荐一款IDEA插件&#xff1a;Apipost Helper&#xff0c;写完代码就可以调试接口并一键生成接口文档&#xff01;而且还…

流式湖仓增强,Hologres + Flink 构建企业级实时数仓

流式湖仓增强,Hologres + Flink 构建企业级实时数仓 一、Hologres+Flink,阿里云上众多客户实时数仓的首选 随着大数据从规模化走向实时化,实时数据的需求覆盖互联网、交通、传媒、金融、政府等各个领域。实时计算在企业大数据平台的比重也在不断提高,部分行业已经达到了 50…

数环通12月产品更新:新增数据表相关功能、优化编辑器,15+应用进行更新

为了满足用户不断增长的需求&#xff0c;我们持续努力提升产品的功能和性能&#xff0c;以更好地支持用户的工作。 数环通12月的最新产品更新已经正式发布&#xff0c;带来了一系列强大的功能&#xff0c;以提升您的工作效率和系统的可靠性。 更新快速预览 新增&优化功能&a…

三维轮廓测量仪:革命性技术在工业智能制造中的多重应用

现代工业智能制造领域中&#xff0c;三维轮廓测量仪是一项重要的测量技术。三维轮廓测量仪利用光学、激光或光电等技术手段&#xff0c;通过测量物体表面轮廓的三维坐标信息&#xff0c;能实现对物体形状、尺寸和表面特征的准确测量。它可以广泛应用于工业自动化、制造工艺控制…

深入了解性能测试工具:优化应用性能的关键步骤

在当今数字化时代&#xff0c;应用程序性能是保持用户满意度和业务成功的关键因素之一。性能测试工具是开发和测试团队的宝贵资源&#xff0c;可以帮助识别和解决潜在的性能瓶颈&#xff0c;确保应用程序在各种负载条件下都能表现出色。本文将介绍性能测试工具的重要性、及它们…

Azkaban学习网站:大数据框架的一站式解决方案,让你事半功倍!

介绍&#xff1a;Azkaban是由LinkedIn公司推出的一个开源的任务调度系统&#xff0c;主要用于在一个工作流内按照特定的Azkaban是由LinkedIn公司推出的一个开源的任务调度系统&#xff0c;主要用于在一个工作流内按照特定的顺序运行一组工作和流程。它负责任务的调度运行&#…

如何进行深入的竞品分析:掌握这些技巧让你更加了解市场

随着互联网行业的快速发展&#xff0c;产品经理需要对竞品进行深入分析&#xff0c;才能更好地把握市场需求和趋势&#xff0c;为公司带来更好的商业价值。那么&#xff0c;如何做好竞品分析呢&#xff1f;以下是我对于这个问题的思考和建议。 一、确定分析的目的和范围 在开…

Nacos 学习之系列文章

系列文章目录 目录 系列文章目录 文章目录 前言 一、Nacos是什么&#xff1f; 二、Nacos的主要功能 服务发现和服务健康监测 动态配置服务 动态 DNS 服务 三、Nacos 地图 四、Nacos 生态图 总结 前言 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Naco…

【稳定检索、投稿优惠】2024年航空航天工程与遥感科学技术国际会议(ICAERSST 2024)

2024年航空航天工程与遥感科学技术国际会议(ICAERSST 2024) 2024 International Conference on Aerospace Engineering and Remote Sensing Science and Technology(ICAERSST 2024) 一、【会议简介】 2024年&#xff0c;一场盛大的国际学术盛会航空航天工程与遥感科学技术国际会…

Spring中事务控制的API介绍(PlatformTransactionManager和TransactionDefinition)

什么是事务&#xff1f; 当你需要一次执行多条SQL语句时&#xff0c;可以使用事务。通俗一点说&#xff0c;如果这几条SQL语句全部执行成功&#xff0c;则才对数据库进行一次更新&#xff0c;如果有一条SQL语句执行失败&#xff0c;则这几条SQL语句全部不进行执行&#xff0c;…

【Python】不一样的Ansible(一)

不一样的Ansible——进阶学习 前言正文概念Ansible CorePlugins和Modules 插件插件类型编写自定义插件基本要求插件选项文档标准编写插件 添加一个本地插件注册为内置插件指定插件目录 其他一些技巧更改Strategy 结语 前言 Ansible 是一个极其简单的 IT 自动化引擎&#xff0c…

【洛谷学习自留】p9226 糖果

解题思路&#xff1a; 简单的计算题&#xff0c;用n对k取余&#xff0c;如果余数为0&#xff0c;则输出k的值&#xff0c;否则输出&#xff08;k-余数&#xff09;的值。 代码实现&#xff1a; import java.util.Scanner;public class p9226 {public static void main(Strin…

关于自增和自减的一些细节问题

目录 基本概念 1.运算 2.输出 基本概念 在这里简单回顾一下自增和自减&#xff1a;顾名思义&#xff0c;自就是同一变量的值发生变化&#xff0c;自增就是该变量值加1&#xff0c;自减就是该变量值减1。 自增和自减又可以根据运算符的位置不同分为前缀式和后缀式。前缀就是…

Jmeter 性能 —— 内存溢出问题定位分析!

1、堆内存溢出 ①稳定性压测一段时间后&#xff0c;Jmeter报错&#xff0c;日志报&#xff1a; java.lang.OutOfMemoryError.Java heap space ②用jmap -histo pid命令dump堆内存使用情况&#xff0c;查看堆内存排名前20个对象。 看是否有自己应用程序的方法&#xff0c;从…

桌面小部件(Appwidget)的列表ListView点击启动Activity失败的解决方案

1、问题现象 点击列表项ItemView启动startActivity始终没反应。 原来的老版本写法如下&#xff1a; //RemoteViewsFactory类override fun getViewAt(position: Int): RemoteViews? {val fillInIntent Intent()//item点击时传递的参数fillInIntent.putExtra(FullTextActivit…