合并两个有序链表(C++语言开发)
程序员文章站
2022-06-20 21:56:53
合并两个有序链表题目描述主要思路(图解)主要代码实现测试题目描述将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/merge-two-sorted-lists著作权归领扣网络所有。商业转载请联系官方授权,非商业转...
题目描述
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
主要思路(图解)
解决此问题可以用到递归的思想,如图所示为过程示意图
总结来讲:如果 l1 的 val 值更小,则将 l1->next 与排序好的链表头相接,l2 亦然,同时,每一层调用都返回排序好的链表头,直到l1或者l2为空为止
可以利用公式来解释(来自官方题解的公式)
主要代码实现
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if(l1==nullptr){
return l2;
}
else if(l2==nullptr){
return l1;
}
else if(l1->val<l2->val){
l1->next=mergeTwoLists(l1->next,l2);
return l1;
}
else{//此处写else if+剩余的条件测试无法通过
l2->next=mergeTwoLists(l1,l2->next);
return l2;
}
}
};
测试
在LeetCode上测试
输入 [1,2,4][1,3,4]
输出 [1,1,2,3,4,4]
本文地址:https://blog.csdn.net/alicekizuna/article/details/107120714