合并k个排序链表

合并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;
		}
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值