题目描述
合并\ k k 个已排序的链表并将其作为一个已排序的链表返回。分析并描述其复杂度。
示例1
输入
[{1,2,3},{4,5,6,7}]
返回值
{1,2,3,4,5,6,7}
代码实现:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
import java.util.*;
public class Solution {
public ListNode mergeKLists(ArrayList<ListNode> lists) {
//优先字符,从小到大
//重写比较器
//特殊样例:输入:[[-2,-1,-1,-1],[]]
if(lists.size() == 0) {
return null;
}
Queue<ListNode> queue = new PriorityQueue( new Comparator<ListNode>() {
public int compare(ListNode listNode1, ListNode listNode2) {
return listNode1.val - listNode2.val;///重载优先级使其变为小根堆
}
});
for(ListNode listNode : lists) {
if(listNode == null) {
continue;
}
queue.add(listNode);
}
ListNode head = new ListNode(0);
ListNode tmp = head;
while(queue.size() > 0) {
tmp.next = queue.poll();
tmp = tmp.next;
if(tmp.next != null) {
queue.add(tmp.next);
}
}
return head.next;
}
}