public ListNode mergeKLists(List<ListNode> lists) {
		if(lists == null || lists.size()==0) return null;
		
		PQsort sort = new PQsort();
		PriorityQueue<ListNode> pq = new PriorityQueue<ListNode>(lists.size(), sort);
		for(ListNode oneList : lists){
		    if(oneList != null)
		        pq.offer(oneList);
		}
		
		ListNode point = new ListNode(0);
		ListNode result = point;
		while(!pq.isEmpty()){
			ListNode out = pq.poll();
			if(out.next != null) pq.offer(out.next);
			
			point.next = out;
			point = point.next;
		}
		
		return result.next;
	}