题目描述
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
解法
归并排序法
public ListNode mergeKLists(ListNode[] lists) {
if(lists == null || lists.length<1) {
return null;
}
return solve(lists, 0, lists.length-1);
}
private ListNode solve(ListNode[] lists, int left, int right) {
if(left == right) {
return lists[left];
}
int mid = (left +right)>>1;
ListNode leftNode = solve(lists, left, mid);
ListNode rightNode = solve(lists, mid+1, right);
return merge(leftNode, rightNode);
}
private ListNode merge(ListNode left, ListNode right) {
if(left == null) {
return right;
}
if(right == null) {
return left;
}
ListNode start = new ListNode(0), head = start;
while(left != null && right != null) {
if(left.val<right.val) {
start.next = left;
left = left.next;
}else {
start.next = right;
right = right.next;
}
start = start.next;
}
if(left == null && right != null) {
start.next = right;
}else if (left!= null && right == null) {
start.next = left;
}
return head.next;
}