美文网首页
【LeetCode】合并两个有序链表

【LeetCode】合并两个有序链表

作者: MyyyZzz | 来源:发表于2019-04-22 15:56 被阅读0次

    题目描述:

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

    示例:
    输入: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】合并两个有序链表

          本文链接:https://www.haomeiwen.com/subject/grtugqtx.html