合并k个排序链表
2017-07-12 17:20
253 查看
合并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;
}
}
}
样例
给出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;
}
}
}
相关文章推荐
- 合并K个已排序的链表
- lintcode 合并k个排序链表
- Google/LintCode:M-合并k个排序链表
- lintcode-合并k个排序链表-104
- 合并k个排序链表
- 104-合并k个排序链表
- 合并k个排序链表
- 合并k个排序链表
- 链表——合并K个排序的链表
- 合并k个已排序的链表
- [各种面试题] 合并k个排序链表
- [Leetcode] Merge k sorted lists 合并k个已排序的链表
- 题目:合并k个排序链表
- LintCode-分治-合并k个排序链表
- 104. 合并k个排序链表
- LeetCode-Merge k Sorted Lists-合并k个排序链表-自底向上归并排序+链表操作
- lintcode-104-合并k个排序链表
- leetCode 23. Merge k Sorted Lists (合并k个排序链表) 解题思路和方法
- 第六章堆排序之“用最小堆将k个已排序链表合并为一个排序链表”(练习6.5-8)
- LeetCodet题解--23. Merge k Sorted Lists(合并K个已排序的链表)