23 Merge k Sorted Lists

题目链接:https://leetcode.com/problems/merge-k-sorted-lists/

题目:

Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

解题思路:
采用的数据结构是优先级队列。
将参加归并的每个链表的头结点都入队列,这样每次可以从队列中取出一个最小的结点放入新链表中,如果选中的结点的后继不为空,就让其后继入队列。

以前基本没怎么用过优先级队列,小小记录下。
优先级队列 PriorityQueue < T > 方法小结:
boolean add(E e)
Inserts the specified element into this priority queue.
E peek()
Retrieves, but does not remove, the head of this queue, or returns null if this queue is empty.
E poll()
Retrieves and removes the head of this queue, or returns null if this queue is empty.

优先级队列比较结点时采用 Comparator 接口的 compare(T o1, T o2) 方法实现。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode mergeKLists(ListNode[] lists) {
        if(lists == null || lists.length == 0)
            return null;
        PriorityQueue<ListNode> queue = new PriorityQueue(lists.length, new Comparator<ListNode>() {
                @Override
                public int compare(ListNode l1, ListNode l2) {
                    return l1.val - l2.val;
                }
        });
        for(int i = 0; i < lists.length; i ++) {
            if(lists[i] != null)
                queue.add(lists[i]);
        }
        ListNode res = new ListNode(0);
        ListNode p = res;
        while(!queue.isEmpty()) {
            ListNode tmp = queue.poll();
            p.next = tmp;
            p = p.next;
            if(tmp.next != null)
                queue.add(tmp.next);
        }
        return res.next;
    }
}
130 / 130 test cases passed.
Status: Accepted
Runtime: 424 ms
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值