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

点我做题

请看题目:

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

实例1: 

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

实例2: 

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

实例3:

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

解题: 

思路: 

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

代码实现:

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;
}

本篇完。

猜你喜欢

转载自blog.csdn.net/Claffic/article/details/130189732
今日推荐