LeetCode 热题 HOT 100 2. 两数相加

295 阅读1分钟

题目

题解

链表模拟


// 定义一个单链表
class ListNode {
    constructor(val) {
        this.val = val
        this.next = null
    }
}

/**
 * @param {ListNode} l1
 * @param {ListNode} l2
 * @return {ListNode}
 */
var addTwoNumbers = function(l1, l2) {
    // 哨兵节点
    const sentry = new ListNode(-1)
    let cur = sentry
    // 记录十进制个数
    let tenCount = 0
    while(l1 || l2) {
        const l1Val = l1 ? l1.val : 0
        const l2Val = l2 ? l2.val : 0
        const sum = l1Val + l2Val + tenCount
        const newVal = sum % 10
        cur.next = new ListNode(newVal)
        if (tenCount > 0) { tenCount -= 1 }
        if (l1) { l1 = l1.next }
        if (l2) { l2 = l2.next }
        cur = cur.next
        tenCount = Math.floor(sum / 10)
    }
    if (tenCount) {
        cur.next = new ListNode(tenCount)
    }
    return sentry.next
};

// 时间复杂度 O(max(m,n))
// 空间复杂度 O(max(m,n))

PS:欢迎大家关注我的微信公众号 xyz编程日记