随笔 - 165,  文章 - 0,  评论 - 4,  阅读 - 18023

题目:

class Solution {
public:
    //合并两个升序链表
    ListNode* mergetwo(ListNode* l1, ListNode* l2){
        if(!l1 || !l2) return l1 ? l1 : l2;
        ListNode* dummy = new ListNode(0);
        ListNode* cur = dummy;
        while(l1&&l2){
            if(l1->val < l2->val){
                cur->next = l1;
                l1 = l1->next;
            }else{
                cur->next = l2;
                l2 = l2->next;
            }
            cur = cur->next;
        }
        cur->next = l1 ? l1 : l2;
        return dummy->next;
    }
    //分治递归合并
    ListNode* merge(vector<ListNode*>& lists, int l, int r){
        if(l==r) return lists[l];       //只剩一个链表
        if(l>r) return nullptr;     //传入空链表的情况
        int mid = (l+r)/2;
        ListNode* left = merge(lists, l, mid);      //合并前半部分链表
        ListNode* right = merge(lists, mid+1, r);       //合并后半部分链表
        return mergetwo(left, right);
    }

    ListNode* mergeKLists(vector<ListNode*>& lists) {
        return merge(lists, 0, lists.size()-1);
    }
};
posted on   孜孜不倦fly  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
历史上的今天:
2022-03-13 Mockingbird_pyqt5_ui修改(二)

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示