力扣 21. 合并两个有序链表

Posted 幽殇默

tags:

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

在这里插入图片描述
题目地址

/**
 * 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) {
        auto head=new ListNode(-1); auto ans=head;
        while(l1&&l2)
        {
            if(l1->val<l2->val)
            {
                head=head->next=new ListNode(l1->val);
                l1=l1->next;
            }
            else
            {
                head=head->next=new ListNode(l2->val);
                l2=l2->next;
            }
        }
        while(l1)
        {
            head=head->next=new ListNode(l1->val);
            l1=l1->next;
        }
        while(l2)
        {
              head=head->next=new ListNode(l2->val);
              l2=l2->next;
        }
        return ans->next;
    }
};

上面那种做法相当于,建了一个值相等的点连接,其实是可以直接连接的,这样就省了内存。

/**
 * 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) {
        auto head=new ListNode(-1); auto ans=head;
        while(l1&&l2)
        {
            if(l1->val<l2->val)
            {
                head=head->next=l1;
                l1=l1->next;
            }
            else
            {
                head=head->next=l2;
                l2=l2->next;
            }
        }
        while(l1)
        {
            head=head->next=l1;
            l1=l1->next;
        }
        while(l2)
        {
              head=head->next=l2;
              l2=l2->next;
        }
        return ans->next;
    }
};

以上是关于力扣 21. 合并两个有序链表的主要内容,如果未能解决你的问题,请参考以下文章

力扣 21. 合并两个有序链表

精选力扣500题 第7题 LeetCode 21. 合并两个有序链表c++详细题解

合并两个有序链表--力扣

21. 合并两个有序链表-链表-简单

LeetCode21合并两个有序链表

21. 合并两个有序链表