Skip to content

Commit 5dea1da

Browse files
committed
✨ [23] Merge sort attempt
1 parent 314e56a commit 5dea1da

File tree

2 files changed

+121
-7
lines changed

2 files changed

+121
-7
lines changed

23/my_solution.js

+81-7
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,92 @@
1-
function ListNode(val, next) {
2-
this.val = (val === undefined ? 0 : val)
3-
this.next = (next === undefined ? null : next)
1+
class ListNode {
2+
constructor(val, next) {
3+
this.val = (val === undefined ? 0 : val)
4+
this.next = (next === undefined ? null : next)
5+
}
46
}
57

68
/**
79
* @param {ListNode[]} lists
810
* @return {ListNode}
911
*/
10-
var mergeKLists = (lists) => {
11-
console.log("lists")
12-
console.log(lists)
12+
const mergeKLists = (lists) => {
13+
if (0 === lists.length) return null;
14+
// if (1 === lists.length) return lists;
1315

14-
return;
16+
while (lists.length > 1) {
17+
lists.push(mergetTwoLists(lists.shift(), lists.shift()));
18+
}
19+
// while (lists.length > 1) {
20+
// console.log("___")
21+
// console.log(lists)
22+
// let mergedLists = mergetTwoLists(lists.shift(), lists.shift())
23+
// lists.push(mergedLists);
24+
// }
25+
26+
console.log("result")
27+
console.log(lists[0])
1528

29+
return;
1630
};
1731

32+
33+
const mergetTwoLists = (ll1, ll2) => {
34+
let dummy = new ListNode(), head = dummy;
35+
while (ll1 && ll2) {
36+
console.log(`ll1.val:${ll1.val}, ll2.val:${ll2.val}`)
37+
if (ll1.val <= ll2.val) {
38+
dummy.next = ll1;
39+
ll1 = ll1.next
40+
} else {
41+
dummy.next = ll2;
42+
ll2 = ll2.next
43+
}
44+
45+
dummy = dummy.next;
46+
47+
// edge case
48+
// console.log("result")
49+
// console.log(result)
50+
// console.log("ll1")
51+
// console.log(ll1)
52+
// console.log("ll2")
53+
// console.log(ll2)
54+
}
55+
56+
// console.log("ll1")
57+
// console.log(ll1)
58+
// console.log(ll1 === null)
59+
// console.log("ll2")
60+
// console.log(ll2)
61+
// console.log(ll2 === null)
62+
//
63+
if (null === ll2) {
64+
console.log("Hereeeee")
65+
dummy.next = ll1;
66+
} else {
67+
dummy.next = ll2;
68+
}
69+
70+
return head.next;
71+
}
72+
73+
1874
// [[1,4,5],[1,3,4],[2,6]]
75+
// mergeKLists([
76+
// new ListNode(1,
77+
// new ListNode(4,
78+
// new ListNode(5))),
79+
// new ListNode(1,
80+
// new ListNode(3,
81+
// new ListNode(4))),
82+
// new ListNode(2,
83+
// new ListNode(6))
84+
// ])
85+
86+
// mergeKLists([
87+
// new ListNode(1,
88+
// new ListNode(4,
89+
// new ListNode(5)))
90+
// ])
91+
92+
mergeKLists([])

23/solution.js

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
class ListNode {
2+
constructor(val, next) {
3+
this.val = (val === undefined ? 0 : val)
4+
this.next = (next === undefined ? null : next)
5+
}
6+
}
7+
8+
/**
9+
* @param {ListNode[]} lists
10+
* @return {ListNode}
11+
*/
12+
const mergeKLists = (lists) => {
13+
if (0 === lists.length) return null;
14+
15+
while (lists.length > 1) {
16+
lists.push(mergetTwoLists(lists.shift(), lists.shift()));
17+
}
18+
19+
return lists[0];
20+
};
21+
22+
23+
const mergetTwoLists = (ll1, ll2) => {
24+
let dummy = new ListNode(), head = dummy;
25+
while (ll1 && ll2) {
26+
if (ll1.val <= ll2.val) {
27+
dummy.next = ll1;
28+
ll1 = ll1.next
29+
} else {
30+
dummy.next = ll2;
31+
ll2 = ll2.next
32+
}
33+
34+
dummy = dummy.next;
35+
}
36+
37+
dummy.next = (null === ll2) ? ll1 : ll2;
38+
39+
return head.next;
40+
}

0 commit comments

Comments
 (0)