Skip to content

Commit e7543e3

Browse files
committed
feat: 1, 2, 21, 24, 26, 27, 80, 82, 83, 86 in js
1 parent 6193248 commit e7543e3

11 files changed

Lines changed: 903 additions & 10 deletions

JavaScript/src/AddTwoNumbers.js

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
/**
2+
* You are given two non-empty linked lists representing two non-negative integers.
3+
* The digits are stored in reverse order and each of their nodes contain a single digit.
4+
* Add the two numbers and return it as a linked list.
5+
* You may assume the two numbers do not contain any leading zero, except the number 0 itself.
6+
*
7+
* Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
8+
* Output: 7 -> 0 -> 8
9+
*
10+
* Result: Accepted
11+
*/
12+
13+
function ListNode(val) {
14+
this.val = val;
15+
this.next = null;
16+
17+
this.equals = function (node) {
18+
return this.next == null && node.next == null || this.val === node.val && (this.next != null) && this.next.equals(node.next);
19+
}
20+
21+
}
22+
23+
/**
24+
* @param {ListNode} l1
25+
* @param {ListNode} l2
26+
* @return {ListNode}
27+
*/
28+
let addTwoNumbers = function (l1, l2) {
29+
let tmp1 = l1.next;
30+
let tmp2 = l2.next;
31+
32+
let results = [];
33+
34+
let addOne = l1.val + l2.val >= 10;
35+
36+
let result = new ListNode((l1.val + l2.val) % 10);
37+
38+
if (addOne) {
39+
result.next = new ListNode(1);
40+
}
41+
42+
results.push(result);
43+
44+
while (true) {
45+
if (tmp1 == null && tmp2 == null) {
46+
break;
47+
} else {
48+
let tmp = 0;
49+
if (tmp1 == null) {
50+
tmp = tmp2.val;
51+
} else if (tmp2 == null) {
52+
tmp = tmp1.val;
53+
} else {
54+
tmp = tmp1.val + tmp2.val;
55+
}
56+
57+
if (addOne) {
58+
tmp += 1;
59+
}
60+
61+
addOne = tmp >= 10;
62+
result = new ListNode(tmp % 10);
63+
64+
if (addOne) {
65+
result.next = new ListNode(1);
66+
}
67+
68+
results.push(result);
69+
70+
if (tmp1 != null) {
71+
tmp1 = tmp1.next;
72+
}
73+
if (tmp2 != null) {
74+
tmp2 = tmp2.next;
75+
}
76+
}
77+
78+
}
79+
80+
let rst = results[0];
81+
for (let i = 1; i < results.length; i++) {
82+
rst.next = results[i];
83+
rst = rst.next;
84+
}
85+
86+
return results[0];
87+
};
88+
89+
let node0 = new ListNode(0);
90+
let node5 = new ListNode(5);
91+
if (addTwoNumbers(node0, node0).equals(new ListNode(0))) {
92+
console.log("pass")
93+
} else {
94+
console.error("failed")
95+
}
96+
97+
let tmp = new ListNode(0);
98+
tmp.next = new ListNode(1);
99+
100+
if (addTwoNumbers(node5, node5).equals(tmp)) {
101+
console.log("pass")
102+
} else {
103+
console.error("failed")
104+
}
105+
106+
let node243 = new ListNode(2);
107+
node243.next = new ListNode(4);
108+
node243.next.next = new ListNode(3);
109+
110+
let node564 = new ListNode(5);
111+
node564.next = new ListNode(6);
112+
node564.next.next = new ListNode(4);
113+
114+
tmp = new ListNode(7);
115+
tmp.next = new ListNode(0);
116+
tmp.next.next = new ListNode(8);
117+
if (addTwoNumbers(node243, node564).equals(tmp)) {
118+
console.log("pass")
119+
} else {
120+
console.error("failed")
121+
}
122+
123+
let node1 = new ListNode(1);
124+
node99 = new ListNode(9);
125+
node99.next = new ListNode(9);
126+
127+
tmp = new ListNode(0);
128+
tmp.next = new ListNode(0);
129+
tmp.next.next = new ListNode(1);
130+
if (addTwoNumbers(node1, node99).equals(tmp)) {
131+
console.log("pass")
132+
} else {
133+
console.error("failed")
134+
}
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
/**
2+
* Merge two sorted linked lists and return it as a new list.
3+
* The new list should be made by splicing together the nodes of the first two lists.
4+
*
5+
* Example:
6+
*
7+
* Input: 1->2->4, 1->3->4
8+
* Output: 1->1->2->3->4->4
9+
*
10+
* Accepted.
11+
*/
12+
13+
function ListNode(val) {
14+
this.val = val;
15+
this.next = null;
16+
17+
this.equals = function (node) {
18+
return this.next == null && node.next == null || this.val === node.val && (this.next != null) && this.next.equals(node.next);
19+
}
20+
}
21+
22+
/**
23+
* @param {ListNode} l1
24+
* @param {ListNode} l2
25+
* @return {ListNode}
26+
*/
27+
let mergeTwoLists = function (l1, l2) {
28+
let result = new ListNode(0);
29+
let fakeHeader = result;
30+
31+
while (l1 != null && l2 != null) {
32+
if (l1.val <= l2.val) {
33+
result.next = new ListNode(l1.val);
34+
l1 = l1.next;
35+
} else {
36+
result.next = new ListNode(l2.val);
37+
l2 = l2.next;
38+
}
39+
result = result.next;
40+
}
41+
42+
result.next = l1 == null ? l2 : l1;
43+
44+
return fakeHeader.next;
45+
};
46+
47+
let node1 = new ListNode(1);
48+
node1.next = new ListNode(2);
49+
node1.next.next = new ListNode(4);
50+
51+
let node2 = new ListNode(1);
52+
node2.next = new ListNode(3);
53+
node2.next.next = new ListNode(4);
54+
55+
let tmp = new ListNode(1);
56+
tmp.next = new ListNode(1);
57+
tmp.next.next = new ListNode(2);
58+
tmp.next.next.next = new ListNode(3);
59+
tmp.next.next.next.next = new ListNode(4);
60+
tmp.next.next.next.next.next = new ListNode(4);
61+
if (mergeTwoLists(node1, node2).equals(tmp)) {
62+
console.log("pass")
63+
} else {
64+
console.error("failed")
65+
}
66+
67+
tmp = new ListNode(1);
68+
tmp.next = new ListNode(2);
69+
tmp.next.next = new ListNode(4);
70+
if (mergeTwoLists(node1, null).equals(tmp)) {
71+
console.log("pass")
72+
} else {
73+
console.error("failed")
74+
}
75+
76+
tmp = new ListNode(1);
77+
tmp.next = new ListNode(3);
78+
tmp.next.next = new ListNode(4);
79+
if (mergeTwoLists(null, node2).equals(tmp)) {
80+
console.log("pass")
81+
} else {
82+
console.error("failed")
83+
}
84+
85+
if (mergeTwoLists(null, null) == null) {
86+
console.log("pass")
87+
} else {
88+
console.error("failed")
89+
}

JavaScript/src/PartitionList.js

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
/**
2+
* Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.
3+
*
4+
* You should preserve the original relative order of the nodes in each of the two partitions.
5+
*
6+
* For example,
7+
* Given 1->4->3->2->5->2 and x = 3,
8+
* return 1->2->2->4->3->5.
9+
*
10+
* Accepted.
11+
*/
12+
13+
function ListNode(val) {
14+
this.val = val;
15+
this.next = null;
16+
17+
this.equals = function (node) {
18+
return this.next == null && node.next == null || this.val === node.val && (this.next != null) && this.next.equals(node.next);
19+
}
20+
}
21+
22+
/**
23+
* @param {ListNode} head
24+
* @param {number} x
25+
* @return {ListNode}
26+
*/
27+
let partition = function (head, x) {
28+
let node = head, greater = null, greaterHead = null, less = null, lessHead = null;
29+
30+
while (node != null) {
31+
if (node.val < x) {
32+
if (less == null) {
33+
less = new ListNode(node.val);
34+
lessHead = less;
35+
} else {
36+
less.next = new ListNode(node.val);
37+
less = less.next;
38+
}
39+
} else {
40+
if (greater == null) {
41+
greater = new ListNode(node.val);
42+
greaterHead = greater;
43+
} else {
44+
greater.next = new ListNode(node.val);
45+
greater = greater.next;
46+
}
47+
}
48+
49+
node = node.next;
50+
}
51+
52+
if (greaterHead == null) {
53+
return lessHead;
54+
} else if (lessHead == null) {
55+
return greaterHead;
56+
}
57+
58+
less.next = greaterHead;
59+
return lessHead;
60+
};
61+
62+
63+
if (partition(null, 2) == null) {
64+
console.log("pass")
65+
} else {
66+
console.error("failed")
67+
}
68+
69+
let node12 = new ListNode(1);
70+
node12.next = new ListNode(2);
71+
let tmp = new ListNode(1);
72+
tmp.next = new ListNode(2);
73+
if (partition(node12, 3).equals(tmp)) {
74+
console.log("pass")
75+
} else {
76+
console.error("failed")
77+
}
78+
79+
if (partition(node12, 0).equals(tmp)) {
80+
console.log("pass")
81+
} else {
82+
console.error("failed")
83+
}
84+
85+
let node143252 = new ListNode(1);
86+
node143252.next = new ListNode(4);
87+
node143252.next.next = new ListNode(3);
88+
node143252.next.next.next = new ListNode(2);
89+
node143252.next.next.next.next = new ListNode(5);
90+
node143252.next.next.next.next.next = new ListNode(2);
91+
tmp = new ListNode(1);
92+
tmp.next = new ListNode(2);
93+
tmp.next.next = new ListNode(2);
94+
tmp.next.next.next = new ListNode(4);
95+
tmp.next.next.next.next = new ListNode(3);
96+
tmp.next.next.next.next.next = new ListNode(5);
97+
if (partition(node143252, 3).equals(tmp)) {
98+
console.log("pass")
99+
} else {
100+
console.error("failed")
101+
}
102+
103+
tmp = new ListNode(1);
104+
tmp.next = new ListNode(3);
105+
tmp.next.next = new ListNode(2);
106+
tmp.next.next.next = new ListNode(2);
107+
tmp.next.next.next.next = new ListNode(4);
108+
tmp.next.next.next.next.next = new ListNode(5);
109+
if (partition(node143252, 4).equals(tmp)) {
110+
console.log("pass")
111+
} else {
112+
console.error("failed")
113+
}

0 commit comments

Comments
 (0)