合并两个排序的链表

2020-05-02  本文已影响0人  su945

题目描述

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

问题分析

解题思路1

/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
    ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
    {
        if (pHead1 == nullptr)
        {
            return pHead2;
        }
        if (pHead2 == nullptr)
        {
            return pHead1;
        }
        ListNode* mergeList = nullptr;
        if (pHead1->val < pHead2->val)
        {
            mergeList = pHead1;
            mergeList->next = Merge(pHead1->next,pHead2);
        }
        else
        {
            mergeList = pHead2;
            mergeList->next = Merge(pHead1, pHead2->next);
        }
        return mergeList;

    }
};

解题思路2

class Solution {
public:
    ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
    {
        //边界判断
        if(pHead1 == NULL)
            return pHead2;
        else if(pHead2 == NULL)
            return pHead1;
        //创建头尾指针
        ListNode* pMergeTail = new ListNode(0);
        ListNode* pMergeHead = new ListNode(0);
        //尾指针赋值
        pMergeTail = pMergeHead;
        //循环开始
        while(pHead1 && pHead2){
            if(pHead1->val < pHead2->val){
                pMergeTail->next = pHead1;
                pHead1 = pHead1->next;
            }
            else{
                pMergeTail->next = pHead2;
                pHead2 = pHead2->next;
                }
            pMergeTail = pMergeTail->next;
        }
        //剩下的链表部分直接添加
        pMergeTail->next = pHead1 ? pHead1 : pHead2;
        return pMergeHead->next;
    }
};
上一篇 下一篇

猜你喜欢

热点阅读