1. 程式人生 > >【LeetCode】23. Merge k Sorted Lists - Java實現

【LeetCode】23. Merge k Sorted Lists - Java實現

文章目錄

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; }