需求
給你兩個 非空 的鏈表,表示兩個非負(fù)的整數(shù)。
它們每位數(shù)字都是按照 逆序 的方式存儲的,并且每個節(jié)點只能存儲 一位 數(shù)字。
請你將兩個數(shù)相加,并以相同形式返回一個表示和的鏈表。
你可以假設(shè)除了數(shù)字 0 之外,這兩個數(shù)都不會以 0 開頭。文章來源:http://www.zghlxwxcb.cn/news/detail-809857.html
代碼
# 定義鏈表節(jié)點類
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def add_two_numbers(l1, l2):
# 用于遍歷鏈表的指針
p1, p2 = l1, l2
# 用于存儲計算結(jié)果的鏈表的頭節(jié)點和當(dāng)前節(jié)點
head = ListNode(0)
current = head
# 用于存儲進(jìn)位
carry = 0
while p1 or p2:
# 獲取當(dāng)前節(jié)點的值,如果對應(yīng)鏈表已經(jīng)遍歷完,則將值設(shè)為0
x = p1.val if p1 else 0
y = p2.val if p2 else 0
# 計算和以及進(jìn)位
total = x + y + carry
# 整除操作,取結(jié)果的整數(shù)部分
carry = total // 10
# 創(chuàng)建新節(jié)點并將其添加到結(jié)果鏈表中
current.next = ListNode(total % 10)
# 更新指針
current = current.next
if p1:
p1 = p1.next
if p2:
p2 = p2.next
# 處理最高位的進(jìn)位
if carry > 0:
current.next = ListNode(carry)
return head.next
# 創(chuàng)建第一個鏈表
l1 = ListNode(2)
l1.next = ListNode(4)
l1.next.next = ListNode(3)
# 創(chuàng)建第二個鏈表
l2 = ListNode(5)
l2.next = ListNode(6)
l2.next.next = ListNode(4)
# 調(diào)用函數(shù)得到結(jié)果鏈表
result = add_two_numbers(l1, l2)
# 遍歷結(jié)果鏈表并打印每個節(jié)點的值
while result:
print(result.val, end=",")
result = result.next
運(yùn)行結(jié)果
文章來源地址http://www.zghlxwxcb.cn/news/detail-809857.html
到了這里,關(guān)于LeetCode 算法 2.兩數(shù)相加(python版)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!