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;
           }       
       }
  • 相关阅读:
    c# yield关键字原理详解
    Linux环境基于CentOS7 搭建部署Docker容器
    关于c#中委托使用小结
    推荐一本好的c#高级程序设计教程
    WEB网站常见受攻击方式及解决办法
    判断URL是否存在
    提升高并发量服务器性能解决思路
    分享asp.net学习交流社区
    js中对arry数组的各种操作小结
    jQuery动态实现title的修改 失效问题
  • 原文地址:https://www.cnblogs.com/Lune-Qiu/p/8595663.html
Copyright © 2011-2022 走看看