zoukankan      html  css  js  c++  java
  • 【LeetCode】21. 合并两个有序链表

    题目

    输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。

    示例1:

    输入:1->2->4, 1->3->4
    输出:1->1->2->3->4->4
    

    限制:0 <= 链表长度 <= 1000

    本题同【剑指Offer】面试题25. 合并两个排序的链表

    思路一:迭代

    添加一个虚拟节点处理头结点。

    代码

    时间复杂度:O(m + n)
    空间复杂度:O(1)

    class Solution {
    public:
        ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
            if (!l1 || !l2) return l1 ? l1 : l2;
            ListNode *newHead = new ListNode(-1), *pre = newHead;                
            while (l1 && l2) {
                if (l1->val <= l2->val) {
                    pre->next = l1;
                    l1 = l1->next;
                } else {
                    pre->next = l2;
                    l2 = l2->next;
                }
                pre = pre->next;
            }
            pre->next = l1 ? l1 : l2;
            return newHead->next;
            
        }
    };
    

    思路二:递归

    代码

    时间复杂度:O(m + n)
    空间复杂度:O(1)

    class Solution {
    public:
        ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
            if (!l1 || !l2) return l1 ? l1 : l2;
            ListNode *newHead = nullptr;                
            if (l1->val <= l2->val) {
                newHead = l1;
                newHead->next = mergeTwoLists(l1->next, l2);
            } else {
                newHead = l2;
                newHead->next = mergeTwoLists(l1, l2->next);
            }
            return newHead;        
        }
    };
    
  • 相关阅读:
    java面向对象3
    java面向对象2
    java面向对象1
    java基础5
    java基础4
    java基础3
    递归之汉诺塔问题
    自定义 strcpy函数
    自定义strcmp函数
    自定义strcat函数
  • 原文地址:https://www.cnblogs.com/galaxy-hao/p/12649861.html
Copyright © 2011-2022 走看看