两数相加

136 阅读1分钟

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

你可以假设除了数字 0 之外,这两个数字都不会以零开头。

用栈的方式来存储两个链表,然后再进行加法操作,先把第一个链表存储到栈里面,然后再把第二个链表存储到栈里面,从栈顶开始每个数字进行相加,再链接链表;

代码如下:

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} l1
 * @param {ListNode} l2
 * @return {ListNode}
 */
var addTwoNumbers = function(l1, l2) {
    let stack1 = []; // 第一个链表的栈
    let stack2 = []; // 第二个链表的栈
    while(l1) {
        stack1.push(l1.val);
        l1 = l1.next;
    }
    while(l2) {
        stack2.push(l2.val);
        l2 = l2.next;
    }
    let res = null;
    let carry = 0;
    while(stack1.length || stack2.length || carry > 0) {
        const num1 = stack1.length === 0 ? 0 : stack1.pop(); // 弹出栈顶元素
        const num2 = stack2.length === 0 ? 0 : stack2.pop(); // 弹出栈顶元素
        const val = (num1 + num2 + carry) % 10; // 超过10的被取余进一位
        carry = (num1 + num2 + carry) >= 10 ? 1 : 0; // 记录是否进一位或者用除法,除以10
        let cur = new ListNode(val); // 把算出来的数字转化成链表节点
        cur.next = res; // 节点链接
        res = cur;
    }
    return res;
};

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/ad… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。