Skip to content

Commit 5f53f02

Browse files
committed
feat: merge-k-sorted-lists
1 parent 8641c26 commit 5f53f02

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

merge-k-sorted-lists/minji-go.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/**
2+
* <a href="https://leetcode.com/problems/https://leetcode.com/problems/merge-k-sorted-lists/">week10-5. merge-k-sorted-lists</a>
3+
* <li>Description: Merge all the linked-lists into one sorted linked-list </li>
4+
* <li>Topics: Linked List, Divide and Conquer, Heap (Priority Queue), Merge Sort </li>
5+
* <li>Time Complexity: O(NlogK), Runtime 1ms </li>
6+
* <li>Space Complexity: O(K), Memory 44.7MB </li>
7+
*/
8+
class Solution {
9+
public ListNode mergeKLists(ListNode[] lists) {
10+
if (lists == null || lists.length == 0) {
11+
return null;
12+
}
13+
return mergeKLists(lists, 0, lists.length - 1);
14+
}
15+
16+
private ListNode mergeKLists(ListNode[] lists, int start, int end) {
17+
if (start == end) {
18+
return lists[start];
19+
}
20+
21+
int mid = (start + end) / 2;
22+
ListNode node1 = mergeKLists(lists, start, mid);
23+
ListNode node2 = mergeKLists(lists, mid + 1, end);
24+
return mergeTwoLists(node1, node2);
25+
}
26+
27+
private ListNode mergeTwoLists(ListNode node1, ListNode node2) {
28+
ListNode dummy = new ListNode(-10_001);
29+
ListNode merge = dummy;
30+
31+
while (node1 != null && node2 != null) {
32+
if (node1.val < node2.val) {
33+
merge.next = node1;
34+
merge = merge.next;
35+
node1 = node1.next;
36+
} else {
37+
merge.next = node2;
38+
merge = merge.next;
39+
node2 = node2.next;
40+
}
41+
}
42+
43+
if (node1 != null && node2 == null) {
44+
merge.next = node1;
45+
} else {
46+
merge.next = node2;
47+
}
48+
49+
return dummy.next;
50+
}
51+
}

0 commit comments

Comments
 (0)