ID | Title | Difficulty | |
---|---|---|---|
Loading... |
23. Merge k Sorted Lists
Hard
LeetCode
Linked List, Divide and Conquer, Heap (Priority Queue), Merge Sort
Problem
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: []
Constraints:
- 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 will not exceed $10^4$.
Code
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
if(lists.length == 0){
return null;
}
int interval = 1;
while(interval < lists.length){
for (int i = 0; i + interval < lists.length; i = i + interval * 2) {
lists[i] = mergeTwoLists(lists[i], lists[i + interval]);
}
interval *= 2;
}
return lists[0];
}
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode dummy = new ListNode(0);
ListNode curr = dummy;
while (l1 != null && l2 != null) {
if (l1.val < l2.val) {
curr.next = l1;
l1 = l1.next;
} else {
curr.next = l2;
l2 = l2.next;
}
curr = curr.next;
}
if(l1 == null){
curr.next = l2;
}
if(l2 == null){
curr.next = l1;
}
return dummy.next;
}
}
按 <- 键看上一题!
22. Generate Parentheses
按 -> 键看下一题!
24. Swap Nodes in Pairs