力扣LeetCode #23 合并K个排序链表(MergeKLists)

- 题目描述

合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

来源:LeetCode

- 示例

输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6

- 思路分析

比较简单的想法是将k个链表的排序问题转换为1v1的问题,将前两个链表排序后,变成一个链表,再和第三个链表排序,又变成一个链表,以此类推。

- JAVA实现

public class MergeKLists {
	public static ListNode mergeKLists(ListNode[] lists) {
        ListNode merged = new ListNode(Integer.MIN_VALUE);
        ListNode move = merged.next;   //用于移动比较
        ListNode saveHead = merged;  //保存头节点
        int number = lists.length, i = 0;
        while(i < number) {  //对list[i] & merged进行比较排序
            while(move != null && lists[i] != null) {
                if(move.val <= lists[i].val) {
                    merged.next = move;
                    move = move.next;
                }
                else {
                    merged.next = lists[i];
                    lists[i] = lists[i].next;
                }
                merged = merged.next;
            }
            if(move == null && lists[i] != null) merged.next = lists[i];
            else if(move != null && lists[i] == null) merged.next = move;
            move = saveHead.next;
            merged = saveHead;
            i++;
        }
        return saveHead.next;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值