LeetCode 2. Add Two Numbers
解法1:
注意: l1和l2的長(zhǎng)度可能不同托享,并且得到的數(shù)有可能為0浑玛。
提示:一個(gè)數(shù)字在鏈表中的位置 = 此數(shù)字在這個(gè)數(shù)中的位置
3->2->1 是123读规。
1是第三位铃拇,及百位忠售。
2是第二位悔橄,即十位缤底。
3是第一位扁耐,即個(gè)位潦蝇。
123 = 3(10^0) + 2(10^1) + 1*(10^2)
# 單鏈表的定義
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
# 指向現(xiàn)在所讀的鏈表的位置
l1_current = l1
l2_current = l2
# 存儲(chǔ)兩個(gè)數(shù)的和
result = 0
# 存儲(chǔ)l1和l2鏈表所代表的數(shù)
l1_number = 0
l2_number = 0
# i 存儲(chǔ)現(xiàn)在是第幾位
i = 0
# 通過(guò)循環(huán)來(lái)得出l1和l2鏈表所存的數(shù)
while l1_current != None:
l1_number = l1_number + l1_current.val*pow(10,i)
l1_current = l1_current.next
i+=1
# 初始化i款熬,l1和l2分開(kāi)計(jì)算是因?yàn)樗麄儍蓚€(gè)的長(zhǎng)度可能不同
i = 0
while l2_current != None:
l2_number = l2_number + l2_current.val*pow(10,i)
l2_current = l2_current.next
i+=1
# 進(jìn)行運(yùn)算
result = l1_number + l2_number
# 將計(jì)算結(jié)果存儲(chǔ)在鏈表中
# 在進(jìn)行循環(huán)之前進(jìn)存儲(chǔ)第一位是因?yàn)椋?
# 1. 要保存這個(gè)鏈表的head
# 2, 避免算出的結(jié)果為0深寥,但輸出是空的情況
result_list = ListNode(result%10)
result_list_current = result_list
result = result/10
while result != 0:
result_list_current.next = ListNode(result%10)
result_list_current = result_list_current.next
result = result/10
return result_list
Note:
-
pow(10,i) :
計(jì)算10的i次方的結(jié)果
?
原帖