【LeetCode】合并两个有序链表

题目描述:

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

示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

解题思路:

首先判断两个链表是否有为空的,若全为空,返回nullptr;若有一个为空,这返回非空链表;
若两链表都不为空,则分别扫描两链表进行排序即可;

代码:

class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        if(!l1 && !l2)
            return nullptr;
        else if(l1 && !l2)
            return l1;
        else if(!l1 && l2)
            return l2;
        ListNode *p1 = l1;
        ListNode *p2 = l2;
        ListNode *res;
        ListNode *q;
        if(l1->val > l2->val)
        {
            res = l2;
            p2=p2->next;
        }
        else
        {
            res = l1;
            p1=p1->next;
        }
        q=res;
        while(p1 && p2)
        {
            if(p1->val > p2->val)
            {
                q->next = p2;
                p2=p2->next;
                q=q->next;
            }
            else
            {
                q->next = p1;
                p1=p1->next;
                q=q->next;
            }
        }
        if(p1)
            q->next = p1;
        if(p2)
            q->next = p2;
        return res;
    }
};

你可能感兴趣的:(【LeetCode】合并两个有序链表)