LeetCode 2:兩數相加 Add Two Numbers

​給出兩個 非空 的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,而且它們的每一個節點只能存儲 一位 數字。若是,咱們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。java

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.node

您能夠假設除了數字 0 以外,這兩個數都不會以 0 開頭。python

You may assume the two numbers do not contain any leading zero, except the number 0 itself.git

示例:指針

輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
緣由:342 + 465 = 807

解題思路:

將兩個鏈表遍歷將相同位置節點值累加,其和過十進一,新鏈表相對位置節點值取其和的個位數值。須要考慮到兩個鏈表長度不一樣時遍歷方式、鏈表遍歷完成時最後一位是否須要進一位。code

Java:

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode head = new ListNode(0);//虛擬頭節點
        ListNode cur = head;//指針
        int carry = 0;//進位值
        while (l1 != null || l2 != null) {//兩個鏈表均爲空時中止遍歷
            int x = (l1 != null) ? l1.val : 0;//x爲l1的值,若是節點爲空,值爲0
            int y = (l2 != null) ? l2.val : 0;//y爲l2的值,若是節點爲空,值爲0
            int sum = carry + x + y;//sum爲兩節點值之和
            carry = sum / 10;//得進位值(1)
            cur.next = new ListNode(sum % 10);//sum%10 得餘數即 個位數的值
            cur = cur.next;//刷新指針
            if (l1 != null) l1 = l1.next;//l1節點不爲空繼續刷新下一個節點
            if (l2 != null) l2 = l2.next;//l2節點不爲空繼續刷新下一個節點
        }
        if (carry > 0) {//若是仍然須要進 1 ,則直接新建一個節點
            cur.next = new ListNode(carry);
        }
        return head.next;
    }
}

Python3:

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        head = ListNode(0)
        cur = head
        sum = 0
        while l1 or l2:
            if l1:#l1不爲空
                sum += l1.val#累計兩節點值的和
                l1 = l1.next#刷新節點
            if l2:
                sum += l2.val#累計兩節點值的和
                l2 = l2.next#刷新節點
            cur.next = ListNode(sum % 10)//刷新新鏈表
            cur = cur.next
            sum = sum // 10
        if sum != 0:
            cur.next = ListNode(sum)
        return head.next

歡迎關注公.衆號一塊兒刷題: 愛寫Bugit

愛寫Bug.png

相關文章
相關標籤/搜索