合并链表

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

最开始的做法:

/*
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 == NULL)
            return pHead2;
        if(pHead2 == NULL)
            return pHead1;
        ListNode* newHead,*temp ;
        if(pHead1->val <= pHead2->val)
        {
            newHead = pHead1;
            pHead1 = pHead1->next;
        }
        else
        {
            newHead = pHead2;
            pHead2 = pHead2->next;
        }
        temp = newHead;
        while(pHead1!=NULL && pHead2 != NULL)
        {
            if(pHead1->val <= pHead2->val)
            {
                newHead->next = pHead1;
                pHead1 = pHead1->next;
            }
            else
            {
                newHead->next = pHead2;
                pHead2 = pHead2->next;
            }
            newHead = newHead->next;
        }
        if(pHead2 == NULL)
        {
              newHead->next = pHead1;
        }
        if(pHead1 == NULL)
        {
            newHead->next = pHead2;
        }
        return temp;
    }
};

改进一些的做法:

class Solution {
public:
    ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
    {
        if(pHead1 == NULL)
            return pHead2;
        if(pHead2 == NULL)
            return pHead1;
        ListNode* newHead = NULL;
        ListNode *temp = NULL;
        while(pHead1!=NULL && pHead2 != NULL)
        {
            if(pHead1->val <= pHead2->val)
            {
                if(newHead == NULL)
                    temp = newHead = pHead1;
                else
                { newHead->next = pHead1;
                  newHead = newHead->next;
                }
                pHead1 = pHead1->next;
            }
            else
            {
                if(newHead == NULL)
                    temp = newHead = pHead2;
               else
               { 
                 newHead->next = pHead2;
                 newHead = newHead->next;
               }
                pHead2 = pHead2->next;
            }
           
        }
        if(pHead2 == NULL)
        {
              newHead->next = pHead1;
        }
        if(pHead1 == NULL)
        {
            newHead->next = pHead2;
        }
        return temp;
    }
};

递归版本:

    ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
    {
       if(pHead1 == NULL){
           return pHead2;
       }
       if(pHead2 == NULL){
           return pHead1;
       }
       if(pHead1->val <= pHead2->val){
           pHead1->next = Merge(pHead1->next, pHead2);
           return pHead1;
       }else{
           pHead2->next = Merge(pHead1, pHead2->next);
           return pHead2;
       }       
   }

 

posted @ 2018-03-18 15:37  Lune-Qiu  阅读(259)  评论(0编辑  收藏  举报