【链表OJ】合并两个有序链表

简介: 【链表OJ】合并两个有序链表

点我做题


请看题目:


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


实例1: 

1769677ecde4695f469f7669651c4fd6_a3a5d67bf00f45148e5842fa501b6d6b.png


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

输出:[1,1,2,3,4,4]


实例2:

输入:l1 = [], l2 = []

输出:[]

实例3:

输入:l1 = [], l2 = [0]

输出:[0]


解题:


思路:


1769677ecde4695f469f7669651c4fd6_a3a5d67bf00f45148e5842fa501b6d6b.png

由于所给的两个链表都是升序的,所以从头开始比较两个链表的值,小者作首位,为了方便找前一个值,可以创建一个哑结点,表示前一个结点,动图如下:

423b16e2347e4274a9826b53f6b73b33.gif


代码实现:


struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){
    // 创建哑结点
    struct ListNode {
    int val = -1;
    struct ListNode *next;
    }dummy;
    // 表示前一个结点
    struct ListNode* prev = &dummy;
    // 二者均非空,则进行比较
    while(list1 && list2)
    {
        if(list1->val < list2->val)
        {
            prev->next = list1;
            list1 = list1->next;
        }
        else
        {
            prev->next = list2;
            list2 = list2->next;
        }
        prev = prev->next;
    }
    prev->next = list1 == NULL?list2:list1;
    return dummy->next;
}

本篇完。


目录
相关文章
|
1月前
Leetcode第21题(合并两个有序链表)
这篇文章介绍了如何使用非递归和递归方法解决LeetCode第21题,即合并两个有序链表的问题。
48 0
Leetcode第21题(合并两个有序链表)
|
1月前
|
存储 算法
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
88 0
|
3月前
|
Python
【Leetcode刷题Python】21. 合并两个有序链表
介绍了几种不同的方法来合并多个已排序的链表,包括暴力求解、使用小顶堆以及分而治之策略。
41 2
|
1月前
|
存储 Java
数据结构第三篇【链表的相关知识点一及在线OJ习题】
数据结构第三篇【链表的相关知识点一及在线OJ习题】
26 7
|
4月前
【数据结构OJ题】环形链表
力扣题目——环形链表
37 3
【数据结构OJ题】环形链表
|
3月前
|
算法
LeetCode第21题合并两个有序链表
该文章介绍了 LeetCode 第 21 题合并两个有序链表的解法,通过创建新链表,依次比较两个链表的头节点值,将较小的值插入新链表,直至其中一个链表遍历完,再将另一个链表剩余部分接到新链表后面,实现合并。
LeetCode第21题合并两个有序链表
|
4月前
【数据结构OJ题】复制带随机指针的链表
力扣题目——复制带随机指针的链表
51 1
【数据结构OJ题】复制带随机指针的链表
|
4月前
【数据结构OJ题】环形链表II
力扣题目——环形链表II
30 1
【数据结构OJ题】环形链表II
|
4月前
【数据结构OJ题】相交链表
力扣题目——相交链表
33 1
【数据结构OJ题】相交链表
|
3月前
|
算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法