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

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

题目来源:

21. 合并两个有序链表 - 力扣(LeetCode) (leetcode-cn.com)

题目描述:


代码实现:

struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {
    if (NULL == list1)
        return list2;
    if (NULL == list2)
        return list1;
    struct ListNode* head = NULL, * tail = NULL;
    while (list1 && list2)//有一个为空就跳出,后面直接把不为空的接上就可以
    {
        //尾插
        if (list1->val < list2->val)
        {
            if (NULL == tail)
            {
                head = tail = list1;
            }
            else
            {
                tail->next = list1;
                tail = tail->next;
            }
            list1 = list1->next;
        }
        else
        {
            if (NULL == tail)
            {
                head = tail = list2;
            }
            else
            {
                tail->next = list2;
                tail = tail->next;
            }
            list2 = list2->next;
        }
    }
    if (NULL == list1)//list1为空,直接把list2接在后面
        tail->next = list2;
    else
        tail->next = list1;
    return head;
}

思路分析:


为实现本题,我们要创建两个结构体指针,head 和 tail ,都初始化为NULL。我们的思路是对比两个链表的每个结点,将小的进行尾插。

实现过程:

我们先处理特殊情况,如果 list1 或者 list2 某一个为空,那就返回另一个。

if (NULL == list1) return list2;
if (NULL == list2) return list1;

1.比较 list1->val 与 list2->val,如果 list1->val 小,那就将 list1 作为新的头结点,让 head与tail 都赋值为 list1,插入后就让 list1 往后走一步。如果比较是相反的结果,那就将 list2 赋给 head与tail,list2 作为合成的头结点;


2.在比较新的 list1->val 与 list2->val 时,如果 list2->val 小,那就开始尾插,将 list2 赋给 tail->next,更新 tail,并更新 list2,让 list2 往后走一步。如果比较的结果相反,那就将 list1 赋给 tail->next,更新 tail 与 list1;


3. 循环步骤 1与2,当 list1/list2 任一走到空,就把不为空的那个链表直接接在 tail->next 上,并返回合成后的链表头 head。



*** 本篇结束 ***

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