leetcode 1669. 合并两个链表【python3一次遍历方法详细过程描述】

news2024/9/28 15:21:27

题目

给你两个链表list1和list2,它们包含的元素分别为n个和m个。请你将list1中下标从a到b的全部节点都删除,并将list2接在被删除节点的位置。
下图中蓝色边和节点展示了操作后的结果:
在这里插入图片描述
请你返回结果链表的头指针。

示例1:

在这里插入图片描述

  • 输入:list1 = [0,1,2,3,4,5], a = 3, b = 4, list2 = [1000000,1000001,1000002]
  • 输出:[0,1,2,1000000,1000001,1000002,5]
  • 解释:我们删除 list1 中下标为 3 和 4 的两个节点,并将 list2 接在该位置。上图中蓝色的边和节点为答案链表。

题解

题目很简单,即把list1中的a到b这一部分用list2替换。思路也很简单先找到list1上的a-1节点,把共next指针指向list2,然后遍历到list2的末尾,再找到b+1节点,把list2的末尾指针的next指针指向list1的b+1。下面以图例来说明整个过程。
第一步,遍历list1到a-1节点。这一步需要切断a-1到a的链接,把a-1的next指针指向list2的首个节点,因此这里需要一个变量来记录a节点。
image.png

第二步pre指针遍历list2真到末尾,curr的指针遍历到b+1位置,然后让pre的next指针指向curr。这样就完成了两个链表的合并。
image.png

基于以上的过程自写代码:

class Solution:
    def mergeInBetween(self, list1: ListNode, a: int, b: int, list2: ListNode) -> ListNode:
        result=ListNode(0,None)
        result.next=list1
        preA=result
        curr=list1
        for _ in range(a):
            preA=preA.next
            curr=curr.next
        #list2
        preA.next=list2
        while preA.next:
            preA=preA.next
        #curr走到b
        for _ in range(a,b+1):
            curr=curr.next
        preA.next=curr
        return result.next

发现官网代码写的还是比较精炼,思路一样。

class Solution:
    def mergeInBetween(self, list1: ListNode, a: int, b: int, list2: ListNode) -> ListNode:
        preA = list1
        for _ in range(a - 1):
            preA = preA.next
        preB = preA
        for _ in range(b - a + 2):
            preB = preB.next
        preA.next = list2
        while list2.next:
            list2 = list2.next
        list2.next = preB
        return list1

计算复杂性

  • 时间复杂度。两个链表都需要遍历一次,因此时间复杂度为 O ( n + m ) O(n+m) O(n+m)
  • 空间复杂度。不需要额外的存储空间因此空间复杂度为 O ( 1 ) O(1) O(1)

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

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

相关文章

网络原理(TCP/IP五层协议)(二)

目录TCP 中的一些主要机制1.确认应答机制(安全机制)2.超时重传机制(安全机制)3.连接管理机制(安全机制)如何建立连接:三次握手如何断开连接:四次挥手TCP 中的一些主要机制 TCP对数据传输提供的管控机制,主要体现在两个方面:安全和…

C++右值引用相关

能够取地址值、有名字的就是左值,不能取地址值、没名字的就是右值。 移动语义 将内存的所有权从一个对象转换到另一个对象,高效的移动来替换效率低下的赋值。 完美转发 定义一个函数模板,该函数模板可以接受任意类型参数,然后将参…

即时通讯开发之TCP/IP中的IP协议、ARP协议

IP 协议是 TCP/IP 协议的核心,所有的 TCP,UDP,IMCP,IGCP 的数据都以 IP 数据格式传输。要注意的是,IP 不是可靠的协议,这是 说,IP 协议没有提供一种数据未传达以后的处理机制--这被认为是上层协议--TCP 或 UDP 要做的事情。所以这也就出现了 TCP 是一个可靠的协议,而 UDP 就没有…

前端开发:JS中关于八皇后算法的使用

前言 在前端开发过程中,关于算法的使用也是非常常见的操作,尤其是处理一些复杂的业务场景,还有就是前端获取到后端返回的复杂结构的数据,所以说前端开发中处处都有算法使用的场景。开发者从接触编程开发开始,就与算法脱…

Java switch case语句详解

if…else 语句可以用来描述一个“二岔路口”,我们只能选择其中一条路来继续走,然而生活中经常会碰到“多岔路口”的情况。switch 语句提供了 if 语句的一个变通形式,可以从多个语句块中选择其中的一个执行。switch 语句格式switch 语句是 Jav…

44物体检测算法:R-CNN,SSD,YOLO【动手学深度学习v2】

44物体检测算法:R-CNN,SSD,YOLO【动手学深度学习v2】 深度学习学习笔记 学习视频:https://www.bilibili.com/video/BV1if4y147hS/?spm_id_from333.337.search-card.all.click&vd_source75dce036dc8244310435eaf03de4e330 目标…

使用Springboot 2.7+Websocket+js实现服务端消息实时推送

文章目录诉求相关技术相关步骤项目创建编写相关配置消息逻辑处理使用JavaScript实现Websocket的前端功能功能测试诉求 模拟服务端主动推送消息给客户端,同时展示客户端发送给客户端的消息以及服务端推送给客户的消息。 相关技术 Springboot(2.7.0)Websocketjavascr…

Elasticsearch7.8.0版本入门——JavaAPI操作(文档操作)

目录一、pom文件依赖二、创建实体对象类三、文档操作代码示例3.1、创建文档代码示例3.2、修改文档代码示例3.3、查询文档代码示例3.4、删除文档代码示例一、pom文件依赖 引入相关依赖 <!-- elasticsearch 依赖 --> <dependency><groupId>org.elasticsearch&l…

【Pytorch】自定义autograd函数,使用graphviz画出计算图

使用pytorch.autograd.Function构建一个自动求导层1. 手工设计一个线性运算层2. 使用pytorch.autograd.Function编码实现3. graphviz进行可视化1. 手工设计一个线性运算层 设输入为x\bold{x}x&#xff0c;参数为w\bold{w}w和b\bold{b}b&#xff0c;运算如下&#xff1a; yw⊙x…

Tips for Confluence Administrators: Part 3

上一篇Part 2中&#xff0c;我们谈到了Confluence的一些已知Bug&#xff0c;例如&#xff1a;从垃圾桶中恢复同名页面不应覆盖现有页面复制/粘贴表格单元格无法按预期工作无法复制表头嵌套表格无法调整大小请不要吝惜你的投票&#xff0c;这有助于提高Atlassian修复它们的优先级…

四、Maven详细教程

本教程相关资料&#xff1a;https://www.aliyundrive.com/s/wMiqbd4Zws6 Maven是专门用于管理和构建Java项目的工具&#xff0c;它的主要功能有&#xff1a; 提供了一套标准化的项目结构 提供了一套标准化的构建流程&#xff08;编译&#xff0c;测试&#xff0c;打包&#xf…

MacOs安装Redis并设置为开机、后台启动

前言 最近闲来无事&#xff0c;将自己的MBP系统重装里&#xff0c;导致里面原来安装的软件都需要重新安装&#xff0c;今天记录一下MacOs安装Redis并设置为开机启动、后台启动的步骤&#xff0c;安装过程略有波折&#xff0c;参考里几篇文章才搞定。 一、安装Redis 两种方式…

【JavaEE】线程池

目录 线程池概念 线程池优点 使用线程池 Executor接口&#xff1a; ThreadPoolExecutor类&#xff1a; 构造方法 Executors工厂类&#xff1a; 工厂方法 线程池中的常用方法 线程池的工作流程 线程池的状态 RUNNING SHUTDOWN STOP TIDYING TERMINATED 简单实现…

Android10 开机向导流程

最近在弄开机向导&#xff0c;网上查了查&#xff0c;基本都是参照系统的​​​​​​Provision应用来做的&#xff0c;而且还要将apk打包到系统目录下的pri-app目录下&#xff0c;打包到其他目录下不行&#xff0c;参照着做是没问题&#xff0c;但是好奇为什么要这么做&#x…

esp32连接阿里云物联网平台进行MQTT通信

前提&#xff1a;IDE是采用arduino IDE&#xff0c;arduino使用的库是pubsubclient 开发板可以使用esp32&#xff08;esp8266也是一样的&#xff09; 已经学会pubsubclient库的基本使用 使用pubsubclient 库连接阿里云物联网平台 const char* ssid "........"; c…

java ssm校园勤工俭学助学志愿者兼职系统 idea maven

本论文主要论述了如何使用JSP技术开发一个校园勤工俭学兼职系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述校园勤工俭学兼职系统的当前背景以及系统开发的…

使用CCProxy+Proxifier实现代理

目录1.使用场景2.什么是网络代理&#xff1f;3.CCProxy3.1 说明3.2 下载安装3.3 使用说明4.Proxifier4.1 说明4.2 下载安装4.3 使用说明4.4 Proxifier CPU占用率高问题解决1.使用场景 很多时候当我们访问某个网络&#xff08;例如&#xff1a;校园网、企业网&#xff09;&#…

射频识别技术|期末考试知识点|重点题目|第1讲_RFID

课堂笔记 1.RFID技术 标签(芯片、天线、封装) 读写器 中间件和系统软件 公共服务体系 2.IC&ID

使用原始命令编译打包部署springboot-demo项目

目录简介源文件介绍编译编译restful-common编译manual-springboot打包&部署&执行jar命令介绍不打包直接运行打普通jar包&#xff0c;通过java -jar运行打fat jar通过java -jar打war&#xff0c;通过部署至tomcat运行纯手工命令开发打包部署的缺点参考简介 本文将使用j…

CUDA编程笔记(7)

文章目录前言共享内存的合理使用数组归约计算使用全局内存的计算引入线程块中的同步函数使用共享内存计算静态共享内存使用动态共享内存性能比较避免共享内存的bank冲突使用共享内存进行数组转置bank概念性能比较总结前言 cuda共享内存的合理使用。 共享内存的合理使用 共享…