leetCode之合并k个排序的列表

这篇博客介绍了如何使用归并排序的思想解决LeetCode中合并k个已排序链表的题目。通过逐步将小链表合并成大链表,最终得到一个单一的排序链表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:
这里写图片描述
首先对于该题目想到的是参考归并排序的方法。
具体思想为:同时针对于无数个数组,我们应该将含多个链表的原始数组分割成较小的数组,后再将小数组合并成较大的数组,知道最后只有一个排序完成的数组。具体代码如下:

    var mergeKLists = function(lists) {
    var length = lists.length;
    function sortList(list, beg, end){
        if(beg > end) {
            return list;
        }

        if(beg === end) {
            return list[beg];
        }

        var mid = Math.floor((end + beg)/2);
        var left = sortList(list,beg,mid);//这里采用递归划分数组的大小,可以提高时间复杂度
        var right = sortList(list,mid+1,end);

        return merge(left, right);
    }
    function merge(l1,l2) {
        var node=new ListNode(0);
        var sortArray=node;//这里采用的是对象的浅拷贝
        while(l1!==null &&l2!==null) {
           if(l1.val<l2.val){
               sortArray.next = new ListNode(l1.val);
               l1=l1.next;
           }else{
               sortArray.next = new ListNode(l2.val);
               l2=l2.next;
           } 
           sortArray=sortArray.next;
        }
        while(l1!==null){
            sortArray.next=new ListNode(l1.val);
            l1=l1.next;
            sortArray=sortArray.next;
        }
        while(l2!==null){
            sortArray.next=new ListNode(l2.val)
            l2=l2.next;
            sortArray=sortArray.next;
        }
       return node.next;//将首个节点元素去掉
    }
    return sortList(lists,0,length-1);
};

最后结果如下:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值