Add Two Numbers II
MediumLinked ListMathStack
Solution
import { ListNode } from '@algorithm/lib';
export function addTwoNumbers(l1: ListNode | null, l2: ListNode | null): ListNode | null {
const convertStack = (node: ListNode | null) => {
const stack: number[] = [];
let currentNode: ListNode | null = node;
while (currentNode !== null) {
stack.push(currentNode.val);
currentNode = currentNode.next;
}
return stack;
};
const stack1 = convertStack(l1);
const stack2 = convertStack(l2);
let currentValue = 0;
let prevNode: ListNode | null = null;
while (0 < stack1.length || 0 < stack2.length) {
currentValue += (stack1.pop() || 0) + (stack2.pop() || 0);
prevNode = new ListNode(currentValue % 10, prevNode);
currentValue = Math.floor(currentValue / 10);
}
return currentValue === 0 ? prevNode : new ListNode(currentValue, prevNode);
}