2-addTwoNumbers.js 1.34 KB
/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
function ListNode(val) {
    this.val = val;
    this.next = null;
}
/**
 * @param {ListNode} l1
 * @param {ListNode} l2
 * @return {ListNode}
 */
var addTwoNumbers = function (l1, l2) {
    function list2array(list) {
        let arr = [];
        do {
            arr.push(list.val);
            list = list.next;
        }
        while (list);
        return arr;
    }
    function array2list(arr) {
        let list = new ListNode(), c = list;
        for (let [i, v] of arr.entries()) {
            c.val = v;
            c.next = i+1 < arr.length?new ListNode():null;
            c = c.next;
        }
        return list;
    }
    let arr1 = list2array(l1);
    let arr2 = list2array(l2);
    let len = Math.max(arr1.length, arr2.length);
    let rs = [], f = 0;
    for (let i = 0; i < len; i++) {
        let v1 = arr1.shift()||0;
        let v2 = arr2.shift()||0;
        let v = v1 + v2 + f;
        if (v >= 10) {
            rs.push(v - 10);
            f = 1;
        } else {
            rs.push(v);
            f = 0;
        }
    }
    if (f > 0) {
        rs.push(f);
    }
    
    return array2list(rs);
};


console.info(addTwoNumbers({
    val: 1,
    next: null
}, {
    val: 9,
    next: { val: 9, next: null }
}));