LeetCode刷题--21.合并两个有序链表(简单)
题目描述
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1 -> 2 -> 4 ,1 -> 3 -> 4
输出:1 -> 1 -> 2 -> 3 -> 4 -> 4
方法 1:递归
思路
- 特殊的,如果 l1 或者 l2 一开始就是 null ,那么没有任何操作需要合并,所以我们只需要返回非空链表。
- 终止条件:两条链表分别名为 l1 和 l2,当 l1 为空或 l2 为空时结束
- 返回值:每一层调用都返回排序好的链表头
- 本级递归内容:如果 l1 的 val 值更小,则将 l1.next 与排序好的链表头相接,l2 同理
- O( m + n ),m 为 l1 的长度,n 为 l2 的长度
代码实现
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
//如果 l1 或者 l2 一开始就是 null ,说明不需要合并,所以我们只需要返回非空链表
if(l1 == null) {
return l2;
}
if(l2 == null) {
return l1;
}
//如果11的val值更小,则将11.next与排序好的链表头相接,12同理
if(l1.val < l2.val) {
l1.next = mergeTwoLists(l1.next, l2);
//每一层调用都返回排序好的链表头
return l1;
} else {
l2.next = mergeTwoLists(l1, l2.next);
return l2;
}
}
}
图解算法

方法二:迭代
思路
我们假设 l1 元素严格比 l2元素少,我们可以将 l2 中的元素逐一插入 l1中正确的位置。
- 首先,我们设定一个哨兵节点 "prehead" ,这可以在最后让我们比较容易地返回合并后的链表。我们维护一个 prev 指针,我们需要做的是调整它的 next 指针。
- 然后,我们重复以下过程,直到 l1 或者 l2 指向了 null :如果 l1 当前位置的值小于等于 l2 ,我们就把 l1 的值接在 prev 节点的后面同时将 l1 指针往后移一个。否则,我们对 l2 做同样的操作。不管我们将哪一个元素接在了后面,我们都把 prev 向后移一个元素。
- 在循环终止的时候, l1 和 l2 至多有一个是非空的。由于输入的两个链表都是有序的,所以不管哪个链表是非空的,它包含的所有元素都比前面已经合并链表中的所有元素都要大。这意味着我们只需要简单地将非空链表接在合并链表的后面,并返回合并链表。
代码实现
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
//先初始化一个预先指针 prehead,该指针的下一个节点指向真正的头结点head,是用来定位头结点的
listnode prehead = new listnode(-1);
listnode prev = prehead;
//遍历列表l1和l2,直到全部遍历完毕
while (l1 != null && l2 != null) {
if (l1.val <= l2.val) {
//prev.next始终指向比较之后的那个小的,l2同理
prev.next = l1;
//当前位置的l1后移一位
l1 = l1.next;
} else {
prev.next = l2;
l2 = l2.next;
}
prev = prev.next;
}
//在循环终止的时候, l1 和 l2 至多有一个是非空的。
//需要将非空链表接在合并链表的后面,并返回合并链表。
prev.next = l1 == null ? l2 : l1;
return prehead.next;
}
}
图解算法




依次类推,最后:

LeetCode刷题--21.合并两个有序链表(简单)的更多相关文章
- leetcode刷题-88.合并两个有序数组
题目 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m ...
- LeetCode 21. 合并两个有序链表(Merge Two Sorted Lists)
21. 合并两个有序链表 21. Merge Two Sorted Lists 题目描述 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. LeetCode ...
- Java实现 LeetCode 21 合并两个有序链表
21. 合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1 ...
- <每日 1 OJ> -LeetCode 21. 合并两个有序链表
题目: 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4输出:1->1-> ...
- LeetCoded第21题题解--合并两个有序链表
21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出 ...
- 力扣Leetcode 21. 合并两个有序链表
合并两个有序链表 将两个升序链表合并为一个新的升序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1-> ...
- [LeetCode题解]21. 合并两个有序链表 | 递归
解题思路 使用递归实现: 定义函数功能:合并两个有序链表,并返回链表的头 结束条件:两个链表其中一个为空,返回另一个链表 递推公式: l1.val < l2.val:l1.next = Merg ...
- 【LeetCode题解】21_合并两个有序链表
目录 21_合并两个有序链表 描述 解法一:迭代 思路 Java 实现 Python 实现 解法二:递归 思路 Java 实现 Python 实现 21_合并两个有序链表 描述 将两个有序链表合并为一 ...
- python刷LeetCode:21. 合并两个有序链表
难度等级:简单 题目描述: 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4输出:1 ...
随机推荐
- windows C++ 网络编程
转载:https://blog.csdn.net/yao_hou/article/details/91400832 https://blog.csdn.net/Ctrl_qun/article/li ...
- 今天启动项目的时候报了一个错MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk.
从报错信息看应该是内存问题导致不能持久化到硬盘,在网上找到了一个解决方法: Redis被配置为保存数据库快照,但它目前不能持久化到硬盘.用来修改集合数据的命令不能用.请查看Redis日志的详细错误信息 ...
- 爬虫(十三):PIL模块
1. PIL模块 在爬虫(十二):图形验证码的识别.滑动验证码的识别(B站滑动验证码)中我留下了一个悬念,为什么安装的是pillow模块,而不是PIL模块.这是因为PIL是python2的产物,它并没 ...
- Python - input时的strip()
例如在读文件里面的文本时,每一行默认后面有\n或者有\r,所以strip用于去除首尾空格或者回车符.
- 4_6 师兄帮帮忙(UVa12412)(选做)
你好,我是外国语学院的本科生.正如你所知道的,编程是一个 在我们大学必修课,即使他/她的专业是远离计算机科学.我根本不喜欢这个 课程,因为我不擅长电脑,我不想有任何编程的尝试! 但我不得不做作业: ...
- Bugku-CTF社工篇之社工进阶
- python setattr()、getattr()、hasattr() 函数用法介绍
一.函数介绍 在动态检查对象是否包含某些属性(包括方法〉相关的函数有如下几个: hasattr(object,name):检查 object 对象是否包含名为 name 的属性或方法. getattr ...
- centosflask+uWSGI+nginx部署
centosflask+uWSGI+nginx部署 1. 概念 Flask自带webserver--Werkzeug,可以搭建服务,运行网站.但在开发时,一般会用专业的--uWSGI. 另外 ...
- 关于High CPU及基本排查
在实际的网络中,总会存在设备出现high CPU的情况,这种情况下,往往会让网络管理员比较着急,因为如果CPU持续high,可能导致设备的性能降低,严重还可能导致设备down掉. 本篇记录,主要记录一 ...
- Pandas的Categorical Data类型
pandas从0.15版开始提供分类数据类型,用于表示统计学里有限且唯一性数据集,例如描述个人信息的性别一般就男和女两个数据常用'm'和'f'来描述,有时也能对应编码映射为0和1.血型A.B.O和AB ...