合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-k-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
用二分法逐一合并:
public ListNode mergeKLists(ListNode[] lists) {
int len=lists.length;
if(len==0){
return null;
}
while(len>1){
for(int i=0;i<len/2;i++){
lists[i]=mergeTwoLists(lists[i], lists[len-1-i]);
}
len=(len+1)/2;
}
return lists[0];
}
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode prehead=new ListNode(-1);
ListNode pre=prehead;
while(l1!=null&&l2!=null){
if(l1.val<=l2.val){
pre.next = l1;
l1=l1.next;
}
else{
pre.next=l2;
l2=l2.next;
}
pre=pre.next;
}
pre.next = l1 == null ? l2 : l1;
return prehead.next;
}
结果:2ms