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;
           }       
       }
  • 相关阅读:
    java基础
    mysql入门
    基础整理
    遍历列表的两种方式
    oracle常用操作
    DIV+CSS网页布局技巧实例1:设置网页整体居中的代码
    html+css 淘宝首页静态页面案例
    WEB前端开发规范文档+CSS命名规范
    day05-苏宁易购导航html
    day04-html
  • 原文地址:https://www.cnblogs.com/Lune-Qiu/p/8595663.html
Copyright © 2011-2022 走看看