首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >链表系列一>合并 k 个升序链表

链表系列一>合并 k 个升序链表

作者头像
用户11305962
发布2025-05-02 21:37:29
发布2025-05-02 21:37:29
1550
举报
文章被收录于专栏:学习学习

题目:

链接: link

这里是引用
这里是引用

方法一解析:

这里是引用
这里是引用

代码:

代码语言:javascript
复制
public ListNode mergeKLists(ListNode[] lists) {
        //建立小根堆
        PriorityQueue<ListNode> heap = new PriorityQueue<>((v1,v2)-> v1.val - v2.val);

        //把所有头节点放入小根堆中
        for(ListNode l : lists){
            if(l != null){
                heap.offer(l);
            }
        }

        ListNode ret = new ListNode(0);
        ListNode prev = ret;
        while(!heap.isEmpty()){
            ListNode t = he

            prev.next = t;
            prev.next = t;
            prev = t;
            if(t.next != null)
                heap.offer(t.next);
        }

        return ret.next;
    }

方法二解析:

这里是引用
这里是引用

代码:

代码语言:javascript
复制
//递归写法:
    public ListNode mergeKLists(ListNode[] lists) {
        return merge(lists,0,lists.length-1);
    }

    public ListNode merge(ListNode[] lists,int left, int right){
        if(left > right)
            return null;
        if(left == right)
            return lists[left];    

        //1.平分数组    
        int mid = (left + right) / 2;
        //[left,mid][mid+1,right]

        //2.递归处理
        ListNode l1 = merge(lists,left,mid);
        ListNode l2 = merge(lists,mid+1,right);

        //3.合并两个有序链表
       return megeToList(l1,l2);
    }

    private ListNode megeToList(ListNode l1, ListNode l2){
        if(l1 == null) return l2;
        if(l2 == null) return l1;

        ListNode ret = new ListNode(0);
        ListNode prev = ret;
        ListNode cur1 = l1, cur2 = l2;

        while(cur1 != null && cur2 != null){
            if(cur1.val < cur2.val){
                prev.next = cur1;
                prev = cur1;
                cur1 = cur1.next;
            }else{
                prev.next = cur2;
                prev = cur2;
                cur2 = cur2.next;
            }
        }
        if(cur1 != null) prev.next = cur1;
        if(cur2 != null) prev.next = cur2;

        return ret.next;
    } 
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目:
  • 方法一解析:
  • 代码:
  • 方法二解析:
  • 代码:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档