zoukankan      html  css  js  c++  java
  • 合并链表

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

    最开始的做法:

    /*
    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;
           }       
       }
  • 相关阅读:
    Populating Next Right Pointers in Each Node I&&II ——II仍然需要认真看看
    MySQL源码分析以及目录结构
    mysql分表的三种方法
    Hadoop学习
    关系型数据库ACID
    九种基本数据类型和它们的封装类
    java中堆和栈的区别
    软件测试-----Graph Coverage作业
    Lab1--关于安装JUnit的简要描述
    动态导入(import)和静态导入(import)的区别
  • 原文地址:https://www.cnblogs.com/Lune-Qiu/p/8595663.html
Copyright © 2011-2022 走看看