LeetCode21—合并两个有序链表
方法一:这是我一开始的想法,将链表L2的各个元素与链表L1的元素进行逐一比较,将L2中的数据元素插入L1中的合适位置。
时间复杂度:O(m+n);空间复杂度:O(1)
1)首先,可能要对第一个元素进行插入操作,所以为了统一插入操作,需要创建哨兵;
2)循环终止条件是L2遍历完即nullptr == pWorkNodeL2,但是在循环过程中,L1可能先遍历完,所以要对L1分情况讨论;
3)跳出循环后,要对检测L1是否遍历完。
这是自然而然的想法,但是经验告诉我们类似这种直觉的想法往往可能不是最好的。
方法二:可以将链表合并的过程看做是新链表的创建过程。比较两个链表数据元素的大小,将数据元素值小的结点插入新链表的末尾,直到遍历完其中一个链表,再将另一个链表中的剩余结点拼接到新链表的末尾。
时间复杂度:O(m+n);空间复杂度:O(1)
虽然这个算法的在时间复杂度上并没有什么提升,但是会感觉这个思路很清晰,给人一种豁然开朗的感觉。实现上要注意的和第一种方法差不多,不同的循环终止条件和循环结束后的判断。
/**
* 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) {
ListNode* pHead = new ListNode(); //创建哨兵结点 ListNode *pTialNode = pHead, *pInsertNode = nullptr;
while (l1 && l2)
{
if (l1->val < l2->val) //比较两个结点数值的大小
{
//插入结点
pInsertNode = l1;
l1 = l1->next;
}
else
{
pInsertNode = l2;
l2 = l2->next;
}
pInsertNode->next = nullptr;
pTialNode->next = pInsertNode;
pTialNode = pInsertNode;
}
pTialNode->next = !l1 ? l2 : l1; return pHead->next;
}
};
如果你有什么其他的方法,欢迎一起交流!
LeetCode21—合并两个有序链表的更多相关文章
- [Swift]LeetCode21. 合并两个有序链表 | Merge Two Sorted Lists
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...
- LeetCode21.合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1->2- ...
- LeetCode21.合并两个有序链表 JavaScript
将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1->2- ...
- scala刷LeetCode--21 合并两个有序链表
一.题目描述 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 二.示例 输入:1->2->4, 1->3->4输出:1->1 ...
- LeetCode_21.合并两个有序链表
LeetCode_21 LeetCode-21.合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回. 新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2-> ...
- LeetCode 21. 合并两个有序链表(Merge Two Sorted Lists)
21. 合并两个有序链表 21. Merge Two Sorted Lists 题目描述 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. LeetCode ...
- 【LeetCode题解】21_合并两个有序链表
目录 21_合并两个有序链表 描述 解法一:迭代 思路 Java 实现 Python 实现 解法二:递归 思路 Java 实现 Python 实现 21_合并两个有序链表 描述 将两个有序链表合并为一 ...
- leetcode 21 Merge Two Sorted Lists 合并两个有序链表
描述: 合并两个有序链表. 解决: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { if (!l1) return l2; if (!l2) ...
- Leecode刷题之旅-C语言/python-21.合并两个有序链表
/* * @lc app=leetcode.cn id=21 lang=c * * [21] 合并两个有序链表 * * https://leetcode-cn.com/problems/merge-t ...
随机推荐
- Java代码登录拦截器例子
通常我们在点击某个按钮的时候,对某个对象进行操作,是需要登陆才能做的,这时候就需要一个拦截器对某个方法进行拦截, 比如你在一个图书管理中心中你要借书,这时候你就会被要求出示借书证,管理员才能借书给你. ...
- python学习第五讲,python基础语法之函数语法,与Import导入模块.
目录 python学习第五讲,python基础语法之函数语法,与Import导入模块. 一丶函数简介 1.函数语法定义 2.函数的调用 3.函数的文档注释 4.函数的参数 5.函数的形参跟实参 6.函 ...
- 贝塞尔曲线控件 for .NET (EN)
Conmajia 2012 Updated on Feb. 18, 2018 In Photoshop, there is a very powerful feature Curve Adjust, ...
- [转]Blue Prism Architecture
本文转自:https://mindmajix.com/blue-prism-architecture Introduction Automation technology is widely bloo ...
- day09 css
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- Eclipse安装hibernate插件
进入hibernate官网下载 http://tools.jboss.org/downloads/ 选择合适版本 下载完成后在eclipse->help->intall new softe ...
- Java设计模式---Strategy策略模式
参考于 : 大话设计模式 马士兵设计模式视频 1.场景介绍 购物网站上有一个产品,有三个字段,档次,价格,重量. 有些同学喜欢轻的,有些手头紧,想要便宜的,有些喜欢档次高的. 那么我们为了提高网站用户 ...
- Windows环境下使用pip install安装lxml库
lxml是Python语言和XML以及HTML工作的功能最丰富和最容易使用的库.lxml是为libxml2和libxslt库的一个Python化的绑定.它与众不同的地方是它兼顾了这些库的速度和功能完整 ...
- 移动开发基础-学习笔记二-字体图标、less、bootstrap入门
1.字体图标 1.字体图标都是用svg图片 1.svg图片不失真 2.svg图标由设计师提供 3.为了减少网络请求,会把svg图标转换成字体图标,放到字体文件中,通过字体库的方式使用 2.制作步骤 1 ...
- Snapde和Excel、PowerPivot、WPS打开超大CSV文件性能比较
Snapde,一个专门为编辑超大型数据量CSV文件而设计的单机版电子表格软件:它运行的速度非常快,反应非常灵敏. 我们拿四份文件进行测试,对比一下他们打开大文件的性能:loan_theme_ids.c ...