【LeetCode每日一题】21. Merge Two Sorted Lists
时间:2022-07-22
本文章向大家介绍【LeetCode每日一题】21. Merge Two Sorted Lists,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目描述
Merge two sorted linked lists and return it as a new sorted list. The new list should be made by splicing together the nodes of the first two lists.
Example:
Input: 1->2->4, 1->3->4
Output: 1->1->2->3->4->4
通过合并两个有序链表生成一个新的有序链表。新链表由这两个链表的节点构成。
分析&解答
链表主要由节点构成,节点之间通过指针链接。两个有序链表的合并的核心在于指针的处理,怎么把两个链表的节点通过指针链接起来,形成新的有序链表。
因为,生成的新链表也是有序的,所以,我们依次比较两个链表的节点,把值小的节点先链接到结果链表中,直到两个链表结束。
具体思路为:
- 我们先考虑corner case,如果两个链表中存在空链表,则返回其中的非空链表(当两个链表都是空链表时,返回任意一个);
- 正常情况,即两个链表均为不为空,使用两个指针分别指向两个链表,然后依次比较两个链表的节点,把值小的节点链接到结果链表中,然后更新节点指针;当指向两个链表的指针为空时,结束循环;最后,把其中的非空指针链接到结果链表中。
代码如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if (!l1 || !l2) return l1 ? l1 : l2;
ListNode *first = new ListNode(-1), *node = first;
while (l1 && l2){
if (l1->val < l2->val){
node->next = l1;
l1 = l1->next;
}
else{
node->next = l2;
l2 = l2->next;
}
node = node->next;
}
if (l1) node->next = l1;
if (l2) node->next = l2;
return first->next;
}
};
Python代码思路和cpp一样:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
if not l1 or not l2:
return l2 if not l1 else l1
first = node = ListNode(-1)
while l1 and l2:
if l1.val < l2.val:
node.next = l1
l1 = l1.next
else:
node.next = l2
l2 = l2.next
node = node.next
if l1:
node.next = l1
if l2:
node.next = l2
return first.next
- 复仇行动:Notepad++官网被圣战组织黑了
- 四大组件的纽带——Intent
- 利用HTC One漏洞破解手机PIN密码
- Android NDk环境配置
- 谷歌再曝Windows8.1漏洞,微软怒了
- Python机器学习的生态系统
- TP-link TL-WR840N系列路由器存在CSRF漏洞,可修改任意配置(含POC测试过程)
- JavaScript严格模式
- 微软修复8个安全漏洞,包括谷歌披露的0day漏洞
- PullToRefreshScrollView 嵌套RecyclerView实现特卖列表倒计时抢购
- 全栈数据工程师养成攻略:Python 基本语法
- 从卷积神经网络的角度看世界
- 外观模式
- 透析挖洞神器mona.py插件新特性
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 基于QuestaSIM的SystemVerilog DPI使用流程(step by step)
- Android | Tangram动态页面之路(五)Tangram原理
- Android | Tangram动态页面之路(六)数据分离
- 在 mono 下使用微软的 OWIN 认证中间件
- 重温四大基础数据结构:数组、链表、队列和栈
- C# 程序在 Docker 中响应 Unix 信号
- Android | Tangram动态页面之路(七)硬核的Virtualview
- Spark SQL如何选择join策略
- 江湖事儿 | 技术人如何做好晋升准备
- Dockerfile 的 ENTRYPOINT 与 CMD
- Docker Entry Script 详解
- 使用 docker-compose 替代 docker run
- 分享给您一个快速离职的 SHELL 脚本
- ASP.NET WebAPI 中的参数绑定
- Qt音视频开发7-ffmpeg音频播放