1. 程式人生 > >2. 兩數相加(python)

2. 兩數相加(python)

給出兩個 非空 的連結串列用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。

如果,我們將這兩個數相加起來,則會返回一個新的連結串列來表示它們的和。

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

示例:

輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807
# Definition for singly-linked list.
# class ListNode:  # 定義連結串列節點類
#     def __init__(self, x):
#         self.val = x
#         self.next = None


class Solution:  # solution解決方案
    def addTwoNumbers(self, l1, l2):  # 定義兩數相加函式
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        # 如果有一個連結串列為空,返回另外一個
        if l1 is None:
            return l2
        if l2 is None:
            return l1
        # tmp是暫存(temporal)
        tmp = ListNode(0)  # 引用ListNode類定義了一個連結串列節點並賦給tmp
        # res是重置(reset)
        res = tmp  # 賦值
        # flag 標示
        flag = 0  # 初始化
        while l1 or l2:  # l1或l2不為空就持續執行
            tmp_sum = 0  # 連結串列節點值的和
            if l1:  # 如果l1不為空,把l1的某個節點值的和賦給tmp_sum
                tmp_sum = l1.val  # 把l1的某個節點的值賦給tmp_sum
                l1 = l1.next
            if l2:  # 如果l2不為空,把l2中和l1對應的節點的值加到tmp_sum
                tmp_sum += l2.val
                l2 = l2.next  # 指向下一個節點,為下一次的加和做準備
            tmp_res = ((tmp_sum + flag) % 10)  # 個位數字
            flag = ((tmp_sum + flag) // 10)  # 進位的數
            res.next = ListNode(tmp_res)
            res = res.next  # res後移
            if flag:  # 如果flag不為0,就是對應位置相加後有進位
                res.next = ListNode(1)  # res的下一節點設為1
        res = tmp.next  # 賦值
        del tmp  # 刪除tmp變數
        return res  # 返回res連結串列