LeetCode445: 兩數相加 II

給你兩個 非空 鏈表來代表兩個非負整數。數字最高位位於鏈表開始位置。它們的每個節點只存儲一位數字。將這兩數相加會返回一個新的鏈表。

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

示例:

輸入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 8 -> 0 -> 7
class LinkNode():
    def __init__(self, value, next = None):
        self.value = value
        self.next = next

class Solution():
    def countPlusValue(self, headA:LinkNode, headB:LinkNode) -> LinkNode:
        if headA is None: return
        if headB is None: return

        list1, list2 = [], []
        while headA:
            list1.append(headA.value)
            headA = headA.next

        while headB:
            list2.append(headB.value)
            headB = headB.next

        newNode = None
        remainder = 0
        while list1 or list2 or remainder != 0: # remainder = 0是爲了最高位兩位數相加大於10需要進位,但此時list1和list2已經爲空,需要此判斷條件
            a = 0 if not list1 else list1.pop()
            b = 0 if not list2 else list2.pop()

            value = a + b + remainder
            remainder = value // 10
            value = value % 10
            curNode = LinkNode(value, newNode)
            newNode = curNode

        return  newNode

# 生成A鏈表
headA1 = LinkNode(3, None)
headA2 = LinkNode(4, headA1)
headA3 = LinkNode(2, headA2)
headA4 = LinkNode(7, headA3)

# 生成B鏈表
headB1 = LinkNode(4, None)
headB2 = LinkNode(6, headB1)
headB3 = LinkNode(5, headB2)

solu = Solution()
plusValue = solu.countPlusValue(headA4, headB3)
print(plusValue)

時間複雜度:O(max(m,n))

空間複雜度:O(m,n)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章