题目描述
合并k个已排序的链表并将其作为一个已排序的链表返回。分析并描述其复杂度。
public ListNode mergeKLists(ArrayList<ListNode> lists) {
if(lists==null||lists.size()==0){
return null;
}
//遍历链表集合,依次进行合并
ListNode first = lists.get(0);
for(int i=1;i<lists.size();i++){
first = merge(first,lists.get(i));
}
return first;
}
ListNode merge(ListNode l1,ListNode l2){//合并链表l1、l2
ListNode head = new ListNode(-1);//建立空链表,存放合并的结果
ListNode p = head;
while(l1!=null && l2!=null){
if(l1.val<l2.val){//每次取这两个链表中最下的一个
p.next = l1;
l1 = l1.next;
}else{
p.next = l2;
l2 = l2.next;
}
p = p.next;
}
p.next = (l1==null?l2:l1);//将链表中剩余的部分加入合并链表中
return head.next;
}