2. 兩數相加(python)
阿新 • • 發佈:2018-12-08
給出兩個 非空 的連結串列用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。
如果,我們將這兩個數相加起來,則會返回一個新的連結串列來表示它們的和。
您可以假設除了數字 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連結串列