题目
合并k个排序链表,并且返回合并后的排序链表。尝试分析和描述其复杂度。
样例
给出3个排序链表[2->4->null,null,-1->null],返回 -1->2->4->null
代码
/**
* Definition for ListNode.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int val) {
* this.val = val;
* this.next = null;
* }
* }
*/
public class Solution {
/**
* @param lists: a list of ListNode
* @return: The head of one sorted list.
*/
public ListNode mergeKLists(List<ListNode> lists) {
// write your code here
if(lists==null || lists.size()==0) return null;
//if(lists.size()==1) return lists.get(0);
int n=lists.size();
ListNode pre = lists.get(0);
for(int i=1; i<n; i++){
ListNode cur = lists.get(i);
pre = merge(pre,cur);
}
return pre;
}
ListNode merge(ListNode a, ListNode b){
ListNode at = a;
ListNode bt = b;
if(a==null) return b;
if(b==null) return a;
while(at!=null && bt!=null){//之前写成||
ListNode pre=null;
while(at!=null && at.val<=bt.val){
pre=at;
at=at.next;
}
if(pre==null){
while(bt!=null && bt.val<=at.val){//之前遗漏了“=”情况,导致pre可能为空
pre=bt;
bt=bt.next;
}
pre.next=at;
}else{
pre.next=bt;
}
}
if(a.val>b.val)
return b;
else
return a;
}
}
样例
给出3个排序链表[2->4->null,null,-1->null],返回 -1->2->4->null