题目
合并 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(lists.length == 0)
return null;
if(lists.length == 1)
return lists[0];
if(lists.length == 2){
return mergeTwoLists(lists[0],lists[1]);
}
int mid = lists.length/2;
ListNode[] l1 = new ListNode[mid];
ListNode[] l2 = new ListNode[lists.length- mid];
for (int i = 0 ;i<mid;i++){
l1[i] = lists[i];
}
for(int i = mid;i<lists.length;i++){
l2[i-mid] = lists[i];
}
return mergeTwoLists(mergeKLists(l1),mergeKLists(l2));
}
public ListNode mergeTwoLists(ListNode l1,ListNode l2) {
if (l1==null){
return l2;
}else if (l2==null){
return l1;
}
ListNode head, tail;
if (l1.val > l2.val) {
head = l2;
l2=l2.next;
} else {
head = l1;
l1=l1.next;
}
tail = head;
while (l1 != null || l2 != null) {
if (l1 == null && l2 != null) {
tail.next = l2;
l2 = l2.next;
} else if (l1 != null && l2 == null) {
tail.next = l1;
l1 = l1.next;
}else if (l1.val > l2.val) {
tail.next = l2;
l2 = l2.next;
}else if (l1.val <= l2.val) {
tail.next = l1;
l1 = l1.next;
}
tail = tail.next;
}
return head;
}
}
复杂度分析