力扣(LeetCode)21. 合并两个有序链表(C++)
创始人
2024-02-03 23:51:23
0

迭代

同时遍历两个链表 , 当前结点值较小的结点插入新的链表尾部。直到有一个链表为空 , 我们将另一个非空链表插入新的链表尾部。

提示 : 使用哑结点,避免特判头结点。二路归并思想应用于链表~

class Solution {
public:ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {auto dummy = new ListNode (-1);auto tail = dummy;while(list1&&list2){if(list1->valval){tail->next = list1;tail = tail->next;list1 = list1->next;} else{tail = tail->next = list2;list2 = list2->next;}}if(list1) tail->next = list1;if(list2) tail ->next = list2;return dummy->next;}
};

时间复杂度 O(n+m)O(n+m)O(n+m) , nnn 是链表 list1list1list1 的长度 , mmm 是链表 list2list2list2 的长度 , 遍历两个链表的时间复杂度 O(n)O(n)O(n) 。

空间复杂度 O(1)O(1)O(1) , 除若干变量使用的常量级空间,没有使用额外的线性空间(算上答案空间,和递归的空间复杂度 O(n+m)O(n+m)O(n+m) 一样)。

递归

巧妙的递归实现 , 保留较小结点 , 递归较大结点。

class Solution {
public:ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {if(!list1) return list2;//终止条件if(!list2) return list1;if(list1->valval){//保留较小结点,递归较大结点list1->next = mergeTwoLists(list1->next,list2);return list1;}else{list2->next = mergeTwoLists(list1,list2->next);return list2;}}
};

时间复杂度 O(n+m)O(n+m)O(n+m) , nnn 是链表 list1list1list1 的长度 , mmm 是链表 list2list2list2 的长度 , 递归遍历两个链表的时间复杂度 O(n)O(n)O(n) 。

空间复杂度 O(n+m)O(n+m)O(n+m) , 递归体压栈的最大深度 O(n)O(n)O(n) , 空间复杂度 O(n)O(n)O(n) 。

博主致语

理解思路很重要!
欢迎读者在评论区留言,作为日更博主,看到就会回复的。

AC

AC

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...