# 23. Merge k Sorted Lists / Hard

You are given an array of k linked-lists lists, each linked-list is sorted in ascending order.

Merge all the linked-lists into one sorted linked-list and return it.

## Example 1:

Input: lists = [[1,4,5],[1,3,4],[2,6]]
Output: [1,1,2,3,4,4,5,6]
Explanation: The linked-lists are:
[
1->4->5,
1->3->4,
2->6
]
merging them into one sorted list:
1->1->2->3->4->4->5->6

## Example 2:

Input: lists = []
Output: []

## Example 3:

Input: lists = [[]]
Output: []

## Constaints

• k == lists.length
• 0 <= k <= 10^4
• 0 <= lists[i].length <= 500
• -10^4 <= lists[i][j] <= 10^4
• lists[i] is sorted in ascending order.
• The sum of lists[i].length won’t exceed 10^4.

# Solution 1: Merge lists one by one (Recursion)

## 效能

### Complexity

• Time Complexity: O(kN) where k is the number of linked lists.
• Space Complexity: O(kN) where k is the number of linked lists.

### LeetCode Result

• Runtime: 232 ms
• Memory Usage: 13.4 MB

# Solution 2: Merge lists one by one

## 效能

### Complexity

• Time Complexity: O(kN) where k is the number of linked lists.
• Space Complexity: O(1)

### LeetCode Result

• Runtime: 160 ms
• Memory Usage: 13.4 MB

# Solution 3: Brute Force

## 效能

### Complexity

• Time Complexity: O(NlogN) where N is the total number of nodes.
• Space Complexity: O(N)

### LeetCode Result

• Runtime: 20 ms
• Memory Usage: 14.1 MB

# Solution 4: Priority Queue

## 思路

Priority Queue 的底層是 Heap Tree，Max Heap Tree 每次 push 都會做 Max Heapify，這個特性使得樹一直都是排序過的。

## 效能

### Complexity

• Time Complexity: O(NlogN) where N is the total number of nodes.
• Space Complexity: O(N)

### LeetCode Result

• Runtime: 20 ms
• Memory Usage: 13.9 MB