Leetcode 21 合并两个有序链表 (链表)

news2024/11/18 15:42:12

Leetcode 21 合并两个有序链表 (链表)

    • 解法1 复杂的第一版本(优化大于和等于合并见方法二)
    • 解法2

在这里插入图片描述

注意注意:先添加元素toadd.next = list1,添加之后才可以移动指针toadd = toadd.next

解法1 复杂的第一版本(优化大于和等于合并见方法二)

在这里插入图片描述
程序的时间复杂度是O(n + m),其中n和m分别是两个输入链表的长度。这是因为程序需要遍历两个链表中的所有节点,直到其中一个链表遍历完为止。
🔴空间复杂度是O(1),因为程序只使用了常数级别的额外空间来存储新的链表节点和辅助指针。没有使用额外的数据结构或递归调用,所以空间复杂度是常数级别的。


/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        ListNode newlist = new ListNode(0); // 初始化一个链表节点,头节点保持不变保证后续返回
        ListNode toadd = newlist; //用作添加的节点,要不断后移

        while(list1 != null && list2 != null){
            if(list1.val == list2.val){
                toadd.next = list1;
                toadd = toadd.next;
                toadd.next = list2;
                toadd = toadd.next;

                list1 = list1.next;
                list2 = list2.next;

            } 
            else if(list1.val < list2.val) {
                toadd.next = list1;
                toadd = toadd.next;
                list1 = list1.next;
            } 
            else {
                toadd.next = list2;
                toadd = toadd.next;
                list2 = list2.next;
            }
        }
        if(list1 != null){
            toadd.next = list1;
        }
        if(list2 != null){
            toadd.next = list2;
        }
        return newlist.next;

    }
}
           
    

解法2

在这里插入图片描述

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        ListNode newlist = new ListNode(0); // 初始化一个链表节点,头节点保持不变保证后续返回
        ListNode toadd = newlist; //用作添加的节点,要不断后移

        while(list1 != null && list2 != null){
            if(list1.val <= list2.val){  //当list1 的元素小于等于 list2,添加list1元素,list1右移
                toadd.next = list1;
                list1 = list1.next;
            } 
            else {   //当list2 的元素小于 list2,添加list2元素,list2右移
                toadd.next = list2;
                list2 = list2.next;
            }
            toadd = toadd.next; // 执行操作后toadd指向下一个
        }

        if(list1 != null){
            toadd.next = list1;
        }
        if(list2 != null){
            toadd.next = list2;
        }

        return newlist.next;

    }
}

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

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

相关文章

数字电路常用芯片合集

前言 本文归纳了本科数字电路中常见的芯片型号及其功能&#xff0c;分为以下几类&#xff1a; 组合逻辑电路芯片 时序逻辑电路芯片 D/A A/D相关芯片 组合逻辑电路芯片 优先编码器74HC148 功能&#xff1a;多→1&#xff0c;选通 逻辑框图 功能表 补充&#xff1a;可以…

react native 使用夜神模拟器开发调试 windows+android

执行adb devices, 提示List of devices attached 打开本地sdk目录中的platform-tools文件夹&#xff0c;复制下面3个文件 打开夜神模拟器安装目录中的bin目录&#xff0c;把复制出来的文件复制替换到bin目录中 在复制一份platform-tools目录中的adb.exe&#xff0c;重命名为…

java最新Springboot3+微服务实战12306高性能售票系统全套开发课程

java最新Springboot3微服务实战12306高性能售票系统全套开发课程 视频课程在文末获取 第1章 课程介绍与学习指南。 1-1 课前必读&#xff08;不读错过一个亿&#xff09; 1-2 课程导学 1-3 为什么要选择最新版本SpringBoot3和JDK17&#xff1f; 1-4 在线demo网站演示 第2…

现货黄金的走势怎么看

成功的现货黄金交易者&#xff0c;都有自己一套的看行情的方法&#xff0c;以及自己最熟悉的交易获利机会&#xff0c;这使他们获利的胜率能够保持在一定的水平之上&#xff0c;长远来说&#xff0c;这也使他们成为市场上的赢家。 现货黄金的价格走势总在不断的变化之中&#x…

GEE:绘制土地利用类型面积分布柱状图

作者:CSDN @ _养乐多_ 本文记录了,在 Google Earth Engine (GEE)中进行随机森林分类后绘制不同类型面积分布柱状图的代码片段。 完整代码请看博客《GEE:随机森林分类教程(样本制作、特征添加、训练、精度、参数优化、贡献度、统计面积)》 柱状图效果如下所示, 文章目…

Pulsar-Pulsar 之 Functions

Pulsar 之 Functions Pulsar FunctionsPulsar Functions是什么&#xff1f;为什么使用Pulsar Functions&#xff1f;实例 完全限定函数名函数实例函数workerFunctions 运行时处理保证和订阅类型上下文函数消息类型Window functionwindow的类型快速开始启用有状态的函数使用Puls…

通讯协议学习之路:RS485协议理论

通讯协议之路主要分为两部分&#xff0c;第一部分从理论上面讲解各类协议的通讯原理以及通讯格式&#xff0c;第二部分从具体运用上讲解各类通讯协议的具体应用方法。 后续文章会同时发表在个人博客(jason1016.club)、CSDN&#xff1b;视频会发布在bilibili(UID:399951374) 序&…

接口测试vs功能测试

接口测试和功能测试的区别&#xff1a; 本文主要分为两个部分&#xff1a; 第一部分&#xff1a;主要从问题出发&#xff0c;引入接口测试的相关内容并与前端测试进行简单对比&#xff0c;总结两者之前的区别与联系。但该部分只交代了怎么做和如何做&#xff1f;并没有解释为什…

“一键替换视频封面,高效批量剪辑从未如此简单

在一个充满竞争和创意的世界&#xff0c;吸引人的视频封面往往能够决定内容的成败。今天&#xff0c;我将向大家介绍一种可以轻松替换视频封面图片的实用技巧&#xff0c;让你在创作中更胜一筹&#xff01; 首先&#xff0c;我们要进入媒体梦工厂主页面&#xff0c;并点击“视…

Go语言入门心法(十一): 文件处理

Go语言入门心法(一): 基础语法 Go语言入门心法(二): 结构体 Go语言入门心法(三): 接口 Go语言入门心法(四): 异常体系 Go语言入门心法(五): 函数 Go语言入门心法(六): HTTP面向客户端|服务端编程 Go语言入门心法(八): mysql驱动安装报错onnection failed Go语言入门心法(…

Java中的代码重构:技巧、优秀实践与方法

什么是 Java 代码重构&#xff1f; Java 代码重构是一种在不影响代码外部行为的前提下进行的代码优化&#xff0c;它通过渐进和小规模的优化来改善现有代码的结构和质量。重构的目标是提高代码的可读性、性能、可维护性和效率等。 Martin Fowler 是这个领域的权威的大牛和非常…

前端 js 之 代码执行的一个过程 02

嘿&#xff0c;欢迎你来 &#xff01;&#x1f495; 文章目录 前言一、运行一个 js 文件二、运行环境三、js执行代码的过程&#xff08;普通变量&#xff09;四、打印 window五、js执行代码的过程&#xff08;函数变量&#xff09;六、函数调用函数的过程注意&#xff01;&…

Seata入门系列【10】分布式事务环境下数据库批量插入和批量更新操作

1 前言 批量插入和批量更新是常用的数据库操作&#xff0c;接下来我们分析下在seata 中如何使用。 如果使用循环遍历插入&#xff0c;效率是很慢的&#xff0c;所以一般的ORM框架都是支持批量操作的&#xff0c;接下来以Mybatis 为例&#xff0c;深入了解下如何使用批处理。 …

c语言练习94:分割链表

分割链表 给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你不需要 保留 每个分区中各节点的初始相对位置。 示例 1&#xff1a; 输入&#xff1a;head [1,4,3,2,5,2], x…

python小游戏:打砖块完整代码

代码如下 import pygame import sys# 初始化Pygame pygame.init()# 游戏窗口尺寸 WIDTH, HEIGHT 800, 600# 颜色定义 WHITE (255, 255, 255) BLUE (0, 0, 255) GREEN (0, 255, 0)# 创建游戏窗口 win pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_captio…

2023年高校大数据实验室建设及大数据实训平台整体解决方案

大数据实验室作为支撑高校人培方案实施的核心设施&#xff0c;大数据实训实验室的建设一定要与学科建设、人才培养充分融合&#xff0c;是一个包含物理空间硬件资源软件资源课程内容的系统化工程。高校大数据实验室建设&#xff0c;除了考虑物理空间与硬件资源外&#xff0c;重…

实验室超声波清洗机的作用

实验室超声波清洗机的作用是什么&#xff1f;顾名思义&#xff0c;其主要作用是清洗。超声波清洗机是实验室中必不可少的清洗装置&#xff0c;利用超声波在液体中的空化效应&#xff0c;产生空化气泡&#xff0c;由于正负压的作用下&#xff0c;空化气泡会在短时间内生成并爆破…

移动协同办公系统,让工作更轻松,生活更美好!

在今天这个信息化、数字化的时代&#xff0c;人们对于工作效率的需求越来越高。随着移动互联网的普及&#xff0c;越来越多的人开始将工作与生活的界限模糊化。在这个背景下&#xff0c;移动协同办公系统应运而生&#xff0c;它打破了传统办公模式的束缚&#xff0c;让工作更轻…

通讯协议学习之路:QSPI协议理论

通讯协议之路主要分为两部分&#xff0c;第一部分从理论上面讲解各类协议的通讯原理以及通讯格式&#xff0c;第二部分从具体运用上讲解各类通讯协议的具体应用方法。 后续文章会同时发表在个人博客(jason1016.club)、CSDN&#xff1b;视频会发布在bilibili(UID:399951374) 一、…

【动态规划】392. 判断子序列、115. 不同的子序列

提示&#xff1a;努力生活&#xff0c;开心、快乐的一天 文章目录 392. 判断子序列&#x1f4a1;解题思路&#x1f914;遇到的问题&#x1f4bb;代码实现&#x1f3af;题目总结 115. 不同的子序列&#x1f4a1;解题思路&#x1f914;遇到的问题&#x1f4bb;代码实现&#x1f3…