(链表) 剑指 Offer 25. 合并两个排序的链表 ——【Leetcode每日一题】

news/2023/11/29 6:59:02

❓剑指 Offer 25. 合并两个排序的链表

难度:简单

输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。

示例1:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

限制

  • 0 <= 链表长度 <= 1000

注意:本题与 21. 合并两个有序链表 相同

💡思路:

法一:递归

将该问题可以分解成子链表,只比较当前 l1 链表 和 l2 链表 的头结点,取最小加入合并的链表中,并将最小结点的来自的链表的头结点往后移一位,在递归调用 mergeTwoLists 函数。

法二:迭代

我们可以用迭代的方法来实现上述算法。当 l1l2 都不是空链表时,判断 l1l2 哪一个链表的头节点的值更小,将较小值的节点添加到结果里,当一个节点被添加到结果里之后,将对应链表中的节点向后移一位。

🍁代码:(C++、Java)

法一:递归
C++

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {if(l1 == nullptr) return l2;if(l2 == nullptr) return l1;if(l1->val < l2->val){l1->next = mergeTwoLists(l1->next, l2);return l1;}else{l2->next = mergeTwoLists(l1, l2->next);return l2;}}
};

Java

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode(int x) { val = x; }* }*/
class Solution {public ListNode mergeTwoLists(ListNode l1, ListNode l2) {if(l1 == null) return l2;if(l2 == null) return l1;if(l1.val < l2.val){l1.next = mergeTwoLists(l1.next, l2);return l1;}else{l2.next = mergeTwoLists(l1, l2.next);return l2;}}
}

法二:迭代
C++

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {if(l1 == nullptr) return l2;if(l2 == nullptr) return l1;//先找到头结点ListNode* head = nullptr;if(l1->val <= l2->val){head = l1;l1 = l1->next;}else{head = l2;l2 = l2->next;}//合并ListNode* cur = head;while(l1 != nullptr && l2 != nullptr){if(l1->val < l2->val){cur->next = l1;l1 = l1->next;}else{cur->next = l2;l2 = l2->next;}cur = cur->next;}if(l1 == nullptr){cur->next = l2;}else{cur->next = l1;}return head;}
};

Java

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode(int x) { val = x; }* }*/
class Solution {public ListNode mergeTwoLists(ListNode l1, ListNode l2) {if(l1 == null) return l2;if(l2 == null) return l1;//先找到头结点ListNode head = null;if(l1.val <= l2.val){head = l1;l1 = l1.next;}else{head = l2;l2 = l2.next;}//合并ListNode cur = head;while(l1 != null && l2 != null){if(l1.val < l2.val){cur.next = l1;l1 = l1.next;}else{cur.next = l2;l2 = l2.next;}cur = cur.next;}if(l1 == null){cur.next = l2;}else{cur.next = l1;}return head;}
}

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( n + m ) O(n+m) O(n+m),其中 nm 分别为两个链表的长度。
  • 空间复杂度 O ( 1 ) O(1) O(1),迭代法只需要常数的空间存放若干变量。而法一递归的空间复杂度为 O ( n + m ) O(n+m) O(n+m),递归调用 mergeTwoLists 函数时需要消耗栈空间,栈空间的大小取决于递归调用的深度。结束递归调用时 mergeTwoLists 函数最多调用 n+m 次,因此空间复杂度为 O ( n + m ) O(n+m) O(n+m)

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我LeetCode主页 / CSDN—力扣专栏,每日更新!

注: 如有不足,欢迎指正!


http://www.ppmy.cn/news/980875.html

相关文章

antdv Select dropdownRender Input 不能输入的问题

简言之&#xff1a;外层套div&#xff0c;然后利用Select的open属性。直接上代码&#xff1a; <template><a-form-item-rest><div click"selOpen !selOpen"><Selectv-model:value"xxx"placeholder"请选择":options"g…

C#,中国福利彩票《刮刮乐》的数学算法(01)——幸运123

1 中国福利彩票 中国福利彩票始于1987年7月27日&#xff0c;以“团结各界热心社会福利事业的人士&#xff0c;发扬社会主义人道主义精神&#xff0c;筹集社会福利资金&#xff0c;兴办残疾人、老年人、孤儿福利事业和帮助有困难的人”、即“扶老、助残、救孤、济困”为宗旨。随…

python面试宝典1

目录标题 python基础1、代码中修改不可变数据会出现什么问题&#xff1f;什么异常&#xff1f;2、a1,b2,不用中间变量交换 a 和 b 的值&#xff1f;3、print调用python中底层的什么方法&#xff1f;4、理解下面代码&#xff0c;结果输出5、对input()函数的理解6、理解代码&…

Filebeat学习笔记

Filebeat基本概念 简介 Filebeat是一种轻量级日志采集器&#xff0c;内置有多种模块&#xff08;auditd、Apache、Nginx、System、MySQL等&#xff09;&#xff0c;针对常见格式的日志大大简化收集、解析和可视化过程&#xff0c;只需一条命令即可。之所以能实现这一点&#…

算法与数据结构(三)--栈

一.栈的基本概念 栈是一种特殊的表&#xff0c;这种表只在表首进行插入和删除操作。 因此&#xff0c;表首对于栈来说具有特殊的意义&#xff0c;称为栈顶。相应的&#xff0c;表尾称为栈底。不含任何元素的栈称为空栈。 栈的修改遵循后进先出的原则&#xff0c;Last In First…

GDB详解

GDB调试 启动gdb调试的方法 一般有三种方式&#xff1a; gdb filenamegdb attach pidgdb filename corename 方法一 直接调试目标程序 gdb filename filename就是需要启动调试的程序文件名&#xff0c;直接gdb启动一个程序进行调试&#xff0c;也就是说这个程序还没有启动…

【PostgreSQL内核学习(八)—— 查询执行(查询执行策略)】

查询执行 查询执行概述查询执行策略可优化语句和数据定义语句四种执行策略策略选择实现Portal执行的过程 声明&#xff1a;本文的部分内容参考了他人的文章。在编写过程中&#xff0c;我们尊重他人的知识产权和学术成果&#xff0c;力求遵循合理使用原则&#xff0c;并在适用的…

解决容器内无法安装vim

用docker创建了一个容器&#xff0c;需要在容器内修改配置文件&#xff0c;突然发现vim竟然不能用&#xff0c;我直接一个apt-get install vim想解决的时候&#xff0c;发现竟然下载不了 看了网上一些文章发现还是源的问题&#xff1a; 从阿里云找到的源&#xff1a; deb htt…

数据可视化(2)

1.柱状图 #柱状图 #bar(x,height,width,*,aligncenter,**kwargs) #height柱子的高度&#xff0c;即y轴上的数据 #width数组的宽度&#xff0c;默认值0.8 #*表示后面的参数为匿名关键字&#xff0c;必须传入参数 #kwargs关键字参数x[1,2,3,4,5] height[random.randint(10,100)f…

linux 系统安装zsh

Linux下安装zsh和oh-my-zsh 1. 安装zsh sudo apt-get update # 对依赖进行更新 sudo apt-get install zsh # 使用apt命令进行安装 chsh -s /bin/zsh #将zsh替换为你的默认shell 2. 安装git sudo apt-get install git # 后续需要使用git安装oh-my-zsh 3. 安装oh-my-zsh wget ht…

stm32 IIC通信

文章目录 IIC 通信一、硬件电路二、IIC时序基本单元三、IIC时序1.指定地址写2.当前地址读3.指定地址读 IIC 通信 IIC总线是一种通用数据总线&#xff0c;有两根通信线&#xff08;SCL(串行时钟总线),SDA&#xff08;串行数据总线&#xff09;&#xff09;。 特点&#xff1a;同…

Java集合之List

ArrayLsit集合 ArrayList集合的特点 ArrayList集合的一些方法 ①.add(Object element) 向列表的尾部添加指定的元素。 ②.size() 返回列表中的元素个数。 ③.get(int index) 返回列表中指定位置的元素&#xff0c;index从0开始。 public class Test {public static void m…

会议室预约系统-检验是否被预约核心SQL

会议室预约时&#xff0c;判断能否被预约&#xff0c;即查询是否已经有预约记录&#xff0c;存在不能被预约。 s,e&#xff1b;表示已经预约的开始结束时间&#xff1b; ns,ne&#xff0c;表示表单提交的预约时间&#xff1b; 只需要(ns,ne)与(s,e)区间没有交集&#xff0c;可…

托管和非托管 Kubernetes 管理平台详解(第二部分)

托管和非托管 Kubernetes 管理平台分别有哪些优势和不足&#xff1f;在本系列的第一篇文章中&#xff0c;我们分析了托管 KMP&#xff0c;探讨了它们的潜在好处和客户群体。本文是该系列的第二篇&#xff0c;将研究非托管 KMP &#xff0c;并分析可以从这种解决方案中获益最多的…

【【51单片机的红外遥控】】

红外遥控&#xff0c;完全把控 红外遥控 利用红外光进行通信的设备&#xff0c;由红外LED将调制后的信号发出&#xff0c;再由专门的红外接收头进行解调输出 通信方式&#xff1a;单工 异步 红外LED波长&#xff1a;940nm 通信协议标准&#xff1a;NEC标准 用那种一体化红红外…

视频画面尺寸怎么裁剪?裁剪视频画面方法分享

如果我们的视频将在不同的平台或设备上播放&#xff0c;而这些设备具有不同的屏幕比例&#xff08;如16:9、4:3、1:1等&#xff09;&#xff0c;则可能需要裁剪来适应目标屏幕。这样观看起来会体验效果更佳&#xff0c;但是该怎么裁剪视频的画面呢&#xff1f;给大家分享几种裁…

xml中的转义字符

xml中的转义字符 &amp;对应的字符是&<对应的字符是<>对应的字符是>&quot;对应的字符是"&apos;对应的字符是 转义的实体引用虽然简单易用&#xff0c;但是需要记忆&#xff0c;而且如果字符串中包含大量的特殊字符&#xff0c;还需要进行逐一替…

Unity UGUI的HorizontalLayoutGroup(水平布局)组件的介绍及使用

Unity UGUI的HorizontalLayoutGroup&#xff08;水平布局&#xff09;组件的介绍及使用 1. 什么是HorizontalLayoutGroup组件&#xff1f; HorizontalLayoutGroup是Unity UGUI中的一种布局组件&#xff0c;用于在水平方向上对子物体进行排列和布局。它可以根据一定的规则自动…

测牛学堂:2023app性能测试总结之性能测试的流程重点总结

今天跟大家分享的是app性能测试的流程。 1 性能需求分析 性能测试的需求分析是进行性能测试的前提&#xff0c;需要对以下几点进行好沟通确认&#xff0c;才能方便后续性能测试的展开。 1 性能测试的目标 2 系统背景的相关信息 3 测试的app的业务场景要明确 4 测试的相关…

Git之回退

git add之后的回退 在你执行了git add之后忽然后悔了&#xff0c;怎么办&#xff1f; 通过下面的命令可以进行回退&#xff1a; git reset HEAD 把刚才add的所有内容都退出staged状态git reset 指定把刚才具体的某个文件退出staged状态 多用git status查看状态 git commit之…
最新文章