欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

合并两个有序链表(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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

主要思路(图解)

解决此问题可以用到递归的思想,如图所示为过程示意图
合并两个有序链表(C++语言开发)
总结来讲:如果 l1 的 val 值更小,则将 l1->next 与排序好的链表头相接,l2 亦然,同时,每一层调用都返回排序好的链表头,直到l1或者l2为空为止
可以利用公式来解释(来自官方题解的公式)
合并两个有序链表(C++语言开发)

主要代码实现

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