leetcode-0002 兩數相加

題目地址 https://leetcode-cn.com/problems/add-two-numbers/git

1. 鏈表遍歷操做

時間複雜度O(n) 空間複雜度O(n)github

var addTwoNumbers = function(l1, l2) {
    // 定義一個虛擬頭節點,加入虛擬頭節點的目的主要是避免在鏈表中添加節點時區分是不是頭節點
    // 好比這裏若是不用頭節點,咱們就得區分curr節點是否爲空,若是爲空拿curr直接賦值
    // 若是不爲空,須要對curr.next進行賦值
    const dummyHead = new ListNode(null)
    let curr =dummyHead
    let carry = 0
    
    while (l1 !== null || l2 !== null || carry === 1) {
        const num1 = l1 === null ? 0 : l1.val
        const num2 = l2 === null ? 0 : l2.val
        const sum = num1 + num2 + carry

        // 這裏是整個循環最重要的兩步
        // 1. 將當前節點的next指向新的節點
        // 2. 移動curr指針到下一個節點
        curr.next = new ListNode(sum % 10)
        curr = curr.next

        l1 = l1 === null ? null : l1.next
        l2 = l2 === null ? null : l2.next
        carry = sum >= 10 ? 1 : 0
    }
    return dummyHead.next
};

更多leetcode題解和數據結構方面的知識,請關注個人github:https://github.com/GuoLizhi/數據結構

相關文章
相關標籤/搜索