题目
看到这道题一开始没什么思路,想到可不可以用归并排序合并的那种逐个比较的做法,但很快否定了,因为这里是多个链表,不是两个,寻找小的较麻烦很花时间(不像两个链表或数组)。思考了很久后想到可不可以用java实现了的优先队列(最近复习数据结构复习过),使用后成功A出。思路利用优先队列帮我进行排序,排完序后再转成链表返回
上代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
PriorityQueue<Integer> queue=new PriorityQueue<>();
for(int i = 0; i < lists.length; i++){
while(lists[i] != null){
queue.add(lists[i].val);
lists[i] = lists[i].next;
}
}
ListNode result = new ListNode(0);
ListNode head = result;
while(!queue.isEmpty()){
head.next = new ListNode(queue.poll());
head = head.next;
}
return result.next;
}
}