兩數相加(Python3)

提出問題:
給出兩個非空的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,並且它們的每個節點只能存儲一位數字。如果,我們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。
示例:
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807

解題思路:設置兩個指針指向兩條鏈表,構造新節點存儲兩個當前指針節點的值,當前節點被遍歷過後,指針後移。對於滿10進1的情況,設置一個變量判斷即可。

代碼如下( ̄▽ ̄):

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        if l1==None:
            return l2
        elif l2==None:
            return l1
        else:
            h1 = l1
            h2 = l2
            flag = 0
            new = ListNode(0)
            res = new
            while h1 or h2:
                temp = 0
                if h1:
                    temp += h1.val
                    h1 = h1.next
                if h2:
                    temp += h2.val
                    h2 = h2.next
                if flag == 1:
                    temp += 1
                    flag = 0
                if temp >= 10:
                    temp -= 10
                    flag = 1
                res.next = ListNode(temp)
                res = res.next
            if flag == 1:
                res.next = ListNode(1)   
            return new.next

時間與空間複雜度:

clipboard.png

題目來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/probl...

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