給出兩個 非空 的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,並且它們的每個節點只能存儲 一位 數字。
如果,我們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。
您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。
示例:
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807
思路:本題較爲簡單,可以借鑑數字系統中進位的方式,使用遞歸,從左往右依次求和,如有進位將進位也傳遞給下一個求和數字中
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def addTwoNumbers(self, l1, l2, c=0):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
if (l1 is None) and (l2 is None) and c == 0:
return None
if l1 is None:
l1 = ListNode(0)
if l2 is None:
l2 = ListNode(0)
# 計算當前位置的求和值
val = l1.val + l2.val + c
c = val / 10 # 求進位
res = ListNode(val % 10)
res.next = self.addTwoNumbers(l1.next, l2.next, c)
return res