合并k个排序链表,并且返回合并后的排序链表。尝试分析和描述其复杂度。
样例
样例
给出3个排序链表[2->4->null,null,-1->null],返回 -1->2->4->null
import java.util.ArrayList;
import java.util.List;
import java.util.PriorityQueue;
import java.util.Scanner;
/**
* 合并k个排序链表,并且返回合并后的排序链表。尝试分析和描述其复杂度。
样例
给出3个排序链表[2->4->null,null,-1->null],返回 -1->2->4->null
*
* @author Dell
*
*/
public class Test104 {
public static ListNode mergeKLists(List<ListNode> lists)
{
if(lists.size()==0)
return null;
PriorityQueue<Integer> pq=new PriorityQueue<>();
for(int i=0;i<lists.size();i++)
{
ListNode temp=lists.get(i);
ListNode q=temp;
while(q!=null)
{
pq.offer(q.val);
q=q.next;
}
}
ListNode result=new ListNode(-1);
ListNode p=result;
while(pq.isEmpty()!=true)
{
ListNode temp=new ListNode(pq.poll());
p.next=temp;
p=p.next;
}
return result.next;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int k=sc.nextInt();
List<ListNode> lists=new ArrayList<>();
for(int i=0;i<k;i++)
{
ListNode temp=new ListNode(-1);
ListNode p=temp;
int n=sc.nextInt();
for(int j=0;j<n;j++)
{ ListNode temp1=new ListNode(sc.nextInt());
p.next=temp1;
p=p.next;
}
lists.add(temp.next);
}
ListNode result=mergeKLists(lists);
while(result!=null)
{
System.out.print(result.val+" ");
result=result.next;
}
}
}