给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。

    你可以假设除了数字 0 之外,这两个数字都不会以零开头。
    示例1:
    image.png
    输入:l1 = [7,2,4,3], l2 = [5,6,4]
    输出:[7,8,0,7]
    示例2:

    输入:l1 = [2,4,3], l2 = [5,6,4]
    输出:[8,0,7]
    示例3:

    输入:l1 = [0], l2 = [0]
    输出:[0]

    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} l1
    10. * @param {ListNode} l2
    11. * @return {ListNode}
    12. */
    13. var addTwoNumbers = function (l1, l2) {
    14. const stack1 = [];
    15. const stack2 = [];
    16. // 入栈
    17. while (l1 || l2) {
    18. if (l1) {
    19. stack1.push(l1.val);
    20. l1 = l1.next;
    21. }
    22. if (l2) {
    23. stack2.push(l2.val);
    24. l2 = l2.next;
    25. }
    26. }
    27. let carry = 0;
    28. // 初始化返回链表
    29. let ansList = null;
    30. // 出栈
    31. while (stack1.length || stack2.length || carry !== 0) {
    32. // 取栈顶
    33. const s1 = stack1.length ? stack1.pop() : 0;
    34. const s2 = stack2.length ? stack2.pop() : 0;
    35. // 计算返回值
    36. let val = s1 + s2 + carry;
    37. // 十进制
    38. carry = parseInt(val / 10);
    39. // 计算当前节点的值
    40. val = val % 10;
    41. const curNode = new ListNode(val);
    42. // 向链表前插入新节点
    43. curNode.next = ansList;
    44. // 重新赋值ansList
    45. ansList = curNode;
    46. }
    47. return ansList;
    48. console.log(stack1, stack2, 132)
    49. };

    image.png