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

    合并两个有序链表

    普通方法

    ListNode *mergeTwoLists(ListNode *&l1, ListNode *&l2) {
            ListNode head(0), *temp = &head;
            while (l1 != nullptr && l2 != nullptr) {
                if (l1->val < l2->val) {
                    temp->next = l1;
                    l1 = l1->next;
                } else {
                    temp->next = l2;
                    l2 = l2->next;
                }
                temp = temp->next;
            }
            if (l1 != nullptr)
                temp->next = l1;
            else if (l2 != nullptr)
                temp->next = l2;
            return head.next;
        }
    

    考虑这样一种情况,l1链表内容为(1,2,3,4,5),l2的内容为(6,7,8,9),在上述代码中,即使前五个数字都来自于l1,但是代码仍将执行 temp->next=l1 五次,浪费时间,可进一步优化

    最优解

        ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {
            ListNode dummy(0);
            dummy.next = l1;
            ListNode *cur = &dummy;
    
            while (l2) {
                while (cur->next && cur->next->val <= l2->val)
                    cur = cur->next;
                l1 = cur->next; 
                cur->next = l2;
                l2 = l1;
            }
            return dummy.next;
        }
    
  • 相关阅读:
    爬取 qq,酷我,千千VIP音乐下
    window10虚拟机安装
    爬取qq,酷我,千千VIP音乐 上
    BEAUTIFUL SOUP
    多线程爬取与存储基础
    CODEFORCE ROUND #625 DIV2
    【POJ
    【POJ
    【POJ
    【POJ
  • 原文地址:https://www.cnblogs.com/INnoVationv2/p/10170843.html
Copyright © 2011-2022 走看看