給你兩個 非空 鏈表來代表兩個非負整數。數字最高位位於鏈表開始位置。它們的每個節點只存儲一位數字。將這兩數相加會返回一個新的鏈表。
你可以假設除了數字 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)