编程训练————合并两个有序链表(C++)

    技术2025-02-19  18

    合并两个有序链表

    题目描述主要思路(图解)主要代码实现测试

    题目描述

    将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

    示例:

    输入: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]

    Processed: 0.019, SQL: 9