问题描述
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
if(null == lists || lists.length == 0){
return null;
}
int n = lists.length;
while (n > 1) {
int k = (n + 1) / 2;
for (int i = 0; i < n / 2; ++i) {
lists[i] = merge(lists[i], lists[i + k]);
}
n = k;
}
return lists[0];
}
private ListNode merge(ListNode node1, ListNode node2){
ListNode root = null;
ListNode cur = root;
while(null != node1 || null != node2){
boolean get2 = null == node1 || (null != node2 && node2.val < node1.val);
int val = get2 ? node2.val : node1.val;
node1 = get2 ? node1 : node1.next;
node2 = get2 ? node2.next : node2;
if(null == cur){
cur = new ListNode(val);
root = cur;
}else{
cur.next = new ListNode(val);
cur = cur.next;
}
}
return root;
}
}