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;
           }       
       }
  • 相关阅读:
    菜鸟Vue学习笔记(二)
    菜鸟Vue学习笔记(一)
    JVM垃圾回收机制之对象回收算法
    什么是web前端开发?
    JDBC API阐述
    JDBC驱动程序分类
    JDBC理论知识
    冒泡排序(Bubble Sorting)
    Java 中几种常用设计模式
    数据库设计六大范式
  • 原文地址:https://www.cnblogs.com/Lune-Qiu/p/8595663.html
Copyright © 2011-2022 走看看