太久没刷题自闭了爬上来记录下
【题目】
将K个顺序排列的列表合并,输出合并后的列表
Example 1:
Input: lists = [[1,4,5],[1,3,4],[2,6]] Output: [1,1,2,3,4,4,5,6] Explanation: The linked-lists are: [ 1->4->5, 1->3->4, 2->6 ] merging them into one sorted list: 1->1->2->3->4->4->5->6
Example 2:
Input: lists = [] Output: []
Example 3:
Input: lists = [[]] Output: []
【思路】
有几种方法,一是可用PriorityQueue重新排列(图B站相关介绍)
PriorityQueue根据优先级排列值,默认倒序 大的在前。而此题中需要顺序排列,要重新定义优先级,但此时PriorityQueue只会比较list的首位元素大小。
【代码】
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
PriorityQueue<ListNode> tmp=new PriorityQueue<>((a,b)->a.val-b.val);
for(ListNode list:lists){
if(list != null)
tmp.add(list);
}
ListNode setA=new ListNode(-12345);//为了表示这个值没用
ListNode setB=setA;//setB指向setA
while(!tmp.isEmpty()){
setA.next=tmp.poll();
setA=setA.next;
if(setA.next != null)
tmp.add(setA.next);//把list的后位元素添加
}
return setB.next;
}
}
过程