Skip to content

Commit c190be4

Browse files
committed
Merge k Sorted Lists Solution
1 parent 5e9e36b commit c190be4

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* function ListNode(val, next) {
4+
* this.val = (val===undefined ? 0 : val)
5+
* this.next = (next===undefined ? null : next)
6+
* }
7+
*/
8+
/**
9+
* @param {ListNode[]} lists
10+
* @return {ListNode}
11+
*/
12+
// ์ตœ์ ํ™”๋œ K๊ฐœ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ๋ณ‘ํ•ฉ - ์žฌ๊ท€ ๋ถ„ํ•  ์ •๋ณต
13+
var mergeKLists = function (lists) {
14+
if (!lists || lists.length === 0) return null;
15+
if (lists.length === 1) return lists[0];
16+
17+
return mergeListsRange(lists, 0, lists.length - 1);
18+
};
19+
20+
// ๋ฒ”์œ„ ๋‚ด์˜ ๋ฆฌ์ŠคํŠธ๋“ค์„ ์žฌ๊ท€์ ์œผ๋กœ ๋ณ‘ํ•ฉ
21+
function mergeListsRange(lists, start, end) {
22+
// ๊ธฐ์ € ์กฐ๊ฑด: ํ•˜๋‚˜์˜ ๋ฆฌ์ŠคํŠธ๋งŒ ๋‚จ์€ ๊ฒฝ์šฐ
23+
if (start === end) {
24+
return lists[start];
25+
}
26+
27+
// ๋‘ ๊ฐœ์˜ ๋ฆฌ์ŠคํŠธ๋งŒ ๋‚จ์€ ๊ฒฝ์šฐ
28+
if (start + 1 === end) {
29+
return mergeTwoLists(lists[start], lists[end]);
30+
}
31+
32+
// ์ค‘๊ฐ„์ ์„ ๊ธฐ์ค€์œผ๋กœ ๋ถ„ํ• 
33+
let mid = Math.floor((start + end) / 2);
34+
let left = mergeListsRange(lists, start, mid);
35+
let right = mergeListsRange(lists, mid + 1, end);
36+
37+
return mergeTwoLists(left, right);
38+
}
39+
40+
// ๋‘ ๊ฐœ์˜ ์ •๋ ฌ๋œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณ‘ํ•ฉ (์ตœ์ ํ™”)
41+
function mergeTwoLists(l1, l2) {
42+
// null ์ฒดํฌ๋ฅผ ๋จผ์ € ์ˆ˜ํ–‰ํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ ๋ฐฉ์ง€
43+
if (!l1) return l2;
44+
if (!l2) return l1;
45+
46+
// ๋” ์ž‘์€ ๊ฐ’์„ ๊ฐ€์ง„ ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•˜๊ณ  ์žฌ๊ท€ ํ˜ธ์ถœ
47+
if (l1.val <= l2.val) {
48+
l1.next = mergeTwoLists(l1.next, l2);
49+
return l1;
50+
} else {
51+
l2.next = mergeTwoLists(l1, l2.next);
52+
return l2;
53+
}
54+
}

0 commit comments

Comments
ย (0)