zoukankan      html  css  js  c++  java
  • 剑指offer JZ-16

    题目描述

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

    输入

    复制
    {1,3,5},{2,4,6}

    返回值

    复制
    {1,2,3,4,5,6}

    思路

    1.非递归:

      申请新的空间用于存放合并后的链表;

      若当前pHead1的val值不大于pHead2的val值,则将pHead1放入新链表中,并将pHead1后移一位;

      若当前pHead2的val值不大于pHead1的val值,则将pHead2放入新链表中,并将pHead2后移一位;

      若某一指针为空,且另一指针非空,则将非空指针加入新链表

      这样的时间复杂度为O(n+m),空间复杂度为O(1)

    /*
    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==nullptr && pHead2==nullptr) return NULL;
            ListNode* p = new ListNode(0);
            ListNode* ans = p;
            while(pHead1 && pHead2)
            {
                if(pHead1->val <= pHead2->val)
                {
                    p->next = pHead1;
                    pHead1 = pHead1->next;
                    p = p->next;
                }
                else
                {
                    p->next = pHead2;
                    pHead2 = pHead2->next;
                    p = p->next;
                }
            }
            p->next = pHead1?pHead1:pHead2;
            return ans->next;
        }
    };
    View Code

    2.递归

      没啥好说的,代码简单明了.时间复杂度为O(n+m),同时因为递归会调用栈的缘故空间复杂度为O(n+m)

    /*
    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;
            else if(pHead2==NULL) return pHead1;
            ListNode* p = new ListNode(0);
            if(pHead1->val <= pHead2->val)
            {
                p = pHead1;
                p->next = Merge(pHead1->next, pHead2);
            }
            else
            {
                p = pHead2;
                p->next = Merge(pHead1, pHead2->next);
            }
            return p;
        }
    };
    View Code

      没啥好说的,代码简洁

  • 相关阅读:
    Eclipse配置Maven的本地仓库和阿里云镜像 加速Maven更新
    layui弹出层基础参数
    鼠标悬停设置layui tips提示框
    Java实现文本中的关键字高亮,匹配所有长度
    获取指定格式的系统时间
    截取过长的字符,多余的字符将由省略号代替
    身份证处理方法(15转18,出生日期隐藏)
    layDate面板出现红色花纹图案
    layer单选框 radio的问题总结
    Android--多线程之Handler
  • 原文地址:https://www.cnblogs.com/alan-W/p/14238315.html
Copyright © 2011-2022 走看看