8000 🟡 Solve problem 2 · AF2B/Leetcode@9f2fced · GitHub
[go: up one dir, main page]

Skip to content

Commit 9f2fced

Browse files
committed
🟡 Solve problem 2
1 parent 63e8d1c commit 9f2fced

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

‎typescript/add_two_numbers.ts

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
class ListNode {
2+
val: number;
3+
next: ListNode | null;
4+
constructor(val?: number, next?: ListNode | null) {
5+
this.val = val ?? 0;
6+
this.next = next ?? null;
7+
}
8+
}
9+
10+
function listNodeToArray(node: ListNode | null): number[] {
11+
const result: number[] = [];
12+
while (node) {
13+
result.push(node.val);
14+
node = node.next;
15+
}
16+
return result;
17+
}
18+
19+
function arrayToListNode(arr: number[]): ListNode | null {
20+
if (arr.length === 0) return null;
21+
const head = new ListNode(arr[0]);
22+
let current = head;
23+
for (let i = 1; i < arr.length; i++) {
24+
current.next = new ListNode(arr[i]);
25+
current = current.next;
26+
}
27+
return head;
28+
}
29+
30+
function addTwoNumbers(
31+
l1: ListNode | null,
32+
l2: ListNode | null
33+
): ListNode | null {
34+
const arr1 = listNodeToArray(l1);
35+
const arr2 = listNodeToArray(l2);
36+
37+
const result: number[] = [];
38+
let carry = 0;
39+
let i = 0;
40+
41+
while (i < arr1.length || i < arr2.length || carry > 0) {
42+
const digit1 = i < arr1.length ? arr1[i] : 0;
43+
const digit2 = i < arr2.length ? arr2[i] : 0;
44+
45+
const sum = digit1 + digit2 + carry;
46+
result.push(sum % 10);
47+
carry = Math.floor(sum / 10);
48+
i++;
49+
}
50+
51+
return arrayToListNode(result);
52+
}

0 commit comments

Comments
 (0)
0