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


    题目

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

    示例1:

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

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

    本题同【LeetCode】21. 合并两个有序链表

    思路一:迭代

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

    代码

    时间复杂度: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;        
        }
    };
    
  • 相关阅读:
    超级楼梯
    hdu1040
    hdu2033(惭愧)
    hdu2032杨辉三角
    hdu1013Digital Roots
    hdu2031
    Linux信号(signal) 机制分析
    android init重启service(进程)
    [android] init进程 .rc文件中service、action的parsing
    oom_adj
  • 原文地址:https://www.cnblogs.com/galaxy-hao/p/12649866.html
Copyright © 2020-2023  润新知