【LeetCode】23. Merge k Sorted Lists - Java實現
阿新 • • 發佈:2018-11-24
文章目錄
1. 題目描述:
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
Example:
Input:
[
1->4->5,
1->3->4,
2->6
]
Output: 1->1->2->3->4->4->5->6
2. 思路分析:
題目的意思是合併k個有序的連結串列。
這題可以運用分治法,進行兩兩合併,轉化成第21題(Merge Two Sorted Lists)去解決,知道最後只剩下一個連結串列。如下圖所示:
3. Java程式碼:
原始碼
:見我GiHub主頁
程式碼:
public ListNode mergeKLists(ListNode[] lists) {
if (lists.length == 0) {
return null;
}
int length = lists.length;
int interval = 1;
while (interval < length) {
for (int i = 0; i < length - interval; i += 2 * interval) {
lists[i] = merge2Lists(lists[i], lists[i + interval]);
}
interval *= 2;
}
return lists[0];
}
private static ListNode merge2Lists(ListNode list1, ListNode list2) {
ListNode head = new ListNode(0);
ListNode cur = head;
while (list1 != null && list2 != null) {
if (list1.val < list2.val) {
cur.next = list1;
list1 = list1.next;
} else {
cur.next = list2;
list2 = list2.next;
}
cur = cur.next;
}
if (list1 != null) {
cur.next = list1;
}
if (list2 != null) {
cur.next = list2;
}
return head.next;
}