每日一题 --- 链表相交[力扣][Go]

news2024/11/18 7:32:54

链表相交

题目:面试题 02.07. 链表相交

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

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

img

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

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

示例 1:

img

输入: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:

img

输入: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:

img

输入: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
  • 如果 listAlistB 没有交点,intersectVal0
  • 如果 listAlistB 有交点,intersectVal == listA[skipA + 1] == listB[skipB + 1]

**进阶:**你能否设计一个时间复杂度 O(n) 、仅用 O(1) 内存的解决方案?

方法一:

使用暴力遍历。

// 暴力
func getIntersectionNode(headA, headB *ListNode) *ListNode {
   for headA != nil {
      p := headB
      for p != nil {
         if p == headA {
            return p
         }
         p = p.Next
      }
      headA = headA.Next
   }
   return nil
}

时间复杂度O(n²),空间复杂度为O(1)

方法二:

将链表转数组,反向遍历寻找第一个不等节点的后续。

// 转数组
func getIntersectionNode(headA, headB *ListNode) *ListNode {
   A := make([]*ListNode, 0)
   B := make([]*ListNode, 0)
   for headA != nil {
      A = append(A, headA)
      headA = headA.Next
   }
   for headB != nil {
      B = append(B, headB)
      headB = headB.Next
   }
   al := len(A) - 1
   bl := len(B) - 1
   for al >= 0 && bl >= 0 {
      if A[al] != B[bl] {
         break
      }
      al--
      bl--
   }
   if al == len(A)-1 || bl == len(B)-1 {
      return nil
   } else {
      return A[al+1]
   }
}

时间复杂度为O(m+n),但空间复杂度也为O(m+n)。

方法三:

详解:代码随想录 (programmercarl.com)

简单来说就是先获取长度,再将长的链表修改为和短链表一样长,最后齐步走找到相等的节点。

// 齐步走
func getIntersectionNode(headA, headB *ListNode) *ListNode {
   pa := headA
   pb := headB
   al := 0
   bl := 0
   for pa != nil {
      pa = pa.Next
      al++
   }
   for pb != nil {
      pb = pb.Next
      bl++
   }
   if al > bl {
      for al != bl {
         headA = headA.Next
         al--
      }
   } else {
      for al != bl {
         headB = headB.Next
         bl--
      }
   }
   for headA != headB {
      headA = headA.Next
      headB = headB.Next
   }
   return headA
}

时间复杂度为O(m+n),空间复杂度O(1)

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

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

相关文章

【计算机操作系统】深入探究CPU,PCB和进程工作原理

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

【前端】Layui的表格常用功能,表单提交事件,表格下拉按钮点击事件,表格外的按钮点击事件

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《前端》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握…

短袖有什么牌子可以推荐?质量最好的短袖品牌推荐

天气转热&#xff0c;大家都开始给自己选一些穿着舒适且好看的短袖。但是不少朋友都应该发现&#xff0c;目前市面上的服装品牌质量参差不齐&#xff0c;而且有一些短袖穿身上还会瘙痒等情况&#xff0c;尤其是大家喜欢入手的网红或明星代言的牌子更严重。 那么短袖应该怎么选…

spring 的理解

spring 的理解 spring 是一个基础的框架&#xff0c;同时提高了一个Bean 的容器&#xff0c;用来装载Bean对象spring会帮我们创建Bean 对象并维护Bean对象 的生命周期。在spring 框架上&#xff0c;还有springCloud,spring Boot 的技术框架&#xff0c;都是以Spring为基石的sp…

centos7 使用docker安装了mongo 怎么设置远程链接,必须使用密码才能连接

docker run -d –name mongodb_container -e MONGO_INITDB_ROOT_USERNAMEroot -e MONGO_INITDB_ROOT_PASSWORDroot -e MONGO_INITDB_DATABASEdataserver -p 27017:27017 \ 无法在mongo容器里编辑文件 如果你无法直接编辑 MongoDB 容器内的配置文件&#xff0c;你可以尝试…

ClickHouse10-ClickHouse中Kafka表引擎

Kafka表引擎也是一种常见的表引擎&#xff0c;在很多大数据量的场景下&#xff0c;会从源通过Kafka将数据输送到ClickHouse&#xff0c;Kafka作为输送的方式&#xff0c;ClickHouse作为存储引擎与查询引擎&#xff0c;大数据量的数据可以得到快速的、高压缩的存储。 Kafka大家…

碳课堂|什么是碳资产?企业如何进行碳资产管理?

碳资产是绿色资产的重要类别&#xff0c;在全球气候变化日益严峻的背景下备受关注。在“双碳”目标下&#xff0c;碳资产管理是企业层面实现碳减排目标和低碳转型的关键。 一、什么是碳资产&#xff1f; 碳资产是以碳减排为基础的资产&#xff0c;是企业为了积极应对气候变化&…

华为昇腾asend

昇腾Ascend C编程语言 Ascend C原生支持C/C编程规范&#xff0c;通过多层接口抽象、并行编程范式、孪生调试等技术&#xff0c;极大提高了算子的开发效率&#xff0c;帮助AI 参考文章 手把手教你在昇腾平台上搭建PyTorch训练环境 - 哔哩哔哩 (bilibili.com)https://www.bilibi…

【Java面试题】计算机网络

文章目录 1.计算机网络基础1.1网络分层模型/OSI七层模型是什么&#xff1f;1.2TCP/IP四层模型是什么&#xff1f;每一层的作用&#xff1f;1.2.1TCP四层模型&#xff1f;1.2.2为什么网络要分层&#xff1f; 1.2常见网络协议1.2.1应用层常见的协议1.2.2网络层常见的协议 2.HTTP2…

基于springboot实现大学生入学审核系统项目【项目源码+论文说明】

基于springboot实现大学生入学审核系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了大学生入学审核系统的开发全过程。通过分析大学生入学审核系统管理的不足&#xff0c;创建了一个计算机管理大学生入…

大数据开发(日志离线分析项目)

大数据开发&#xff08;日志离线分析项目&#xff09; 一、项目需求1、使用jqueryecharts的方式调用程序后台提供的rest api接口&#xff0c;获取json数据&#xff0c;然后通过jquerycss的方式进行数据展示。工作流程如下&#xff1a;2、七大角度1、用户基本信息分析模块2、浏览…

微信怎么恢复聊天记录?效果惊人的3个方法

微信作为我们日常生活中最常用的即时通讯工具之一&#xff0c;承载着我们与亲友之间的重要沟通记录。然而&#xff0c;不可避免地会遇到误删聊天记录的情况&#xff0c;可能是因为手误、设备问题或其他原因。 当我们发现重要的聊天记录不见了&#xff0c;往往会感到焦虑和困扰…

ValueError: Cannot load file containing pickled data when allow_pickle=False

问题描述 遇到报错&#xff1a;ValueError: Cannot load file containing pickled data when allow_pickleFalse 解决方案 经过查阅有人说是与numpy的版本有关&#xff0c;但是还是不要轻易改变环境中的版本&#xff0c;不一定哪个地方就会报错。这里放个解决方案&#xff1a;…

量化交易入门(二十二)MACD指标实现,能挣到钱吗?

学习了MACD指标以后&#xff0c;我们通过量化回测来验证一下&#xff0c;这个指标能否帮我们挣到钱。我们还是使用Backtrader框架&#xff0c;实现MACD的交易策略&#xff0c;然后用苹果股票历史数据完成这个示例。 示例代码如下&#xff1a; import backtrader as bt import…

server端

一、创建项目 expess server 1.1 安装nodemon npm i nodemon 1.2 设置连接数据库mongodb 安装mongoose npm i mongoose 在根目录新建config文件夹/db.config.js // 引入mongodb数据库操作模块 const mongoose require("mongoose") // 连接数据库mongoose.con…

【Git】日志功能

1. git日志显示 # 显示前3条日志 git log -3# 单行显示 git log --oneline# 图表日志 git log --graph# 显示更改摘要 git log --stat# 显示更改位置 git log --patch 或 git log -p# 查看指定文件的提交历史记录 git log {filename}例子1&#xff1a;单行显示 例子2&#xff…

自学编程的六种方法,你必须知道

随着互联网日趋迅猛&#xff0c;编程已经在我们生活当中无处不在了。众所周知&#xff0c;程序员的工资都很不错&#xff0c;于是越来越多的人&#xff0c;都想加入到编程的行业中来。那么如何加入到程序员的行业当中&#xff1f; PHP从入门到放弃&#xff0c;C语言从入门到放…

3款免费甘特图制作工具的比较和选择指南

GanntProject GanttProject https://www.ganttproject.biz/ 是一款项目管理和调度应用&#xff0c;适用于 Windows、macOS 和 Linux。它易于使用&#xff0c;无需任何设置&#xff0c;适用于个人用户和小型团队。该应用提供任务层次结构和依存关系、里程碑、基准行、Gantt 图表…

【深度学习】最强算法模型之:潜在狄利克雷分配(LDA)

潜在狄利克雷分配 1、引言2、潜在狄利克雷分配2.1 定义2.2 原理2.3 算法公式2.4 代码示例 3、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c; 给我讲一讲LDA 小鱼&#xff1a;LDA&#xff1f; 你指的是&#xff1f; 小屌丝&#xff1a;就是算法模型的LDA啊&#xff0c; 你…

基于XGBoost和数据预处理的电动汽车车型预测

基于XGBoost和数据预处理的电动汽车车型预测 文章目录 基于XGBoost和数据预处理的电动汽车车型预测1、前言2、导入数据3、各县电动汽车采用情况条形图4、电动车类型饼图5、前5最欢迎的电动车制造商6、XGBoost模型6.1 字符串列的标识6.2 删除不相关的列6.3 编码分类变量6.4 电动…