23. 合并K个排序链表(未完待续)

我的思路(逐一比较法)

有k个已经排序了的链表,每次从k个链表的头部取一个值最小的出来,放到新链表中就完事儿了。

总结:就是找出k个链表中值最小的那个头结点,然后拼接到新链表中

于是先写了个这样的

class Solution {
    public ListNode mergeKLists(ListNode[] lists) {

        // 首先构造一个先的链表头结点(哑结点)
        ListNode dummyNode = new ListNode(0);

        // 然后再定义一个指针用来指向新链表
        ListNode pos = dummyNode;

        // 设置个计数器,如果有某个链表头结点不为null,就加一
        Integer count = 0;

        do {
            // 清空计数器
            count = 0;

            // 找到头结点最小的那个链表
            ListNode temp = null;

            // 设置个标记
            Integer index = -1;

            for (int i = 0, len = lists.length; i < len; i++) {
                // 要是个空节点,直接告辞,进行下一次循环
                if (lists[i] == null) continue;

                count++;

                // 否则比大小
                if (temp == null || temp.val > lists[i].val) {
                    temp = lists[i];
                    index = i;
                }
            }

            // 如果没有一个链表是正常的(全空,耍我们)
            if (count == 0) break;

            // 如此就找到了头结点值最小的链表
            ListNode newNode = new ListNode(lists[index].val);
            newNode.next = null;

            // 添加到新链表中
            pos.next = newNode;
            pos = pos.next;

            // 更新lists
            lists[index] = lists[index].next;
        } while (count > 0);

        // 返回新的链表
        return dummyNode.next;

    }
}

这个在官方题解中是逐一比较法

LeetCode题解说明,k表示链表的数目,N表示总共的节点数。

---------------------------------------------------------------------------------------------------------------------------------------------------

暴力法

把所有节点(假设N个)放到一个数组中处理

这里的一个稳定的排序算法,参考排序算法稳定性:https://www.cnblogs.com/Leophen/p/11397731.html

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值