提出問題:
給出兩個非空的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,並且它們的每個節點只能存儲一位數字。如果,我們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。您可以假設除了數字 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
時間與空間複雜度:
題目來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/probl...