Leecode 21. 合并两个有序链表——Leecode大厂热题100道系列

Posted 来老铁干了这碗代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leecode 21. 合并两个有序链表——Leecode大厂热题100道系列相关的知识,希望对你有一定的参考价值。

我是小张同学,立志用最简洁的代码做最高效的表达


以下是我个人做的题解,每个题都尽量囊括了所有解法,并做到了最优解,欢迎大家收藏!留言!

传送门——>Leecode大厂热题100道系列题解


题目描述

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

示例 1:
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

示例 2:
输入:l1 = [], l2 = []
输出:[]

示例 3:
输入:l1 = [], l2 = [0]
输出:[0]

提示:
两个链表的节点数目范围是 [0, 50]
-100 <= Node.val <= 100
l1 和 l2 均按 非递减顺序 排列


思路

简单模拟即可。

有一个技巧注意:可以构造一个头结点,这样就不必纠结哪个链表的节点排在最前面了。


/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        ListNode* res = new ListNode(-1);
        ListNode* temp = res;
        while(l1 || l2) {
            if(l1 != nullptr && l2 != nullptr) {
                if(l1->val >= l2->val) {
                    temp->next = l2;
                    l2 = l2->next;
                } else {
                    temp->next = l1;
                    l1 = l1->next;
                }
            } else if(l1 == nullptr) {
                temp->next = l2;
                l2 = l2->next;
            } else {
                temp->next = l1;
                l1 = l1->next;
            }
            temp = temp->next;
        }
        return res->next;
    }
};

弱小和无知不是生存的障碍,傲慢才是。

以上是关于Leecode 21. 合并两个有序链表——Leecode大厂热题100道系列的主要内容,如果未能解决你的问题,请参考以下文章

leecode刷题(23)-- 合并两个有序链表

合并两个有序链表_21

21. 合并两个有序链表

[leetcode] 21. 合并两个有序链表

21. 合并两个有序链表

21_合并两个有序链表