問題描述:
給定兩個
非空鍊錶來表示兩個非負整數。位數按照
逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)針對這個問題給出以下簡答:輸出:7 -> 0 -> 8
原因:342 + 465 = 807
class listnode:
def __init__(self, x):
self.val = x
self.next = none
#在python中乙個變數就是乙個指標
class solution:
def addtwonumbers(self, l1, l2):
""":type l1: listnode
:type l2: listnode
:rtype: listnode
"""#初始化乙個鍊錶
pre_node = listnode(0)
#並用cur指向
cur = pre_node
flag = 0 #進製符
#----遍歷鍊錶-------
while l1 or l2:
#對鍊錶中的每乙個值
val1=val2=0
if l1: #判斷鍊錶是否有元素
val1 = l1.val #讀取鍊錶中的值
l1 = l1.next #將當前節點放到下乙個節點
if l2:
val2= l2.val
l2 = l2.next
sumnum = val1 + val2 + flag#add計算
flag = int(sumnum / 10)#為0則不需要進製為一的
cur.next = listnode(sumnum % 10)#增加乙個節點
cur = cur.next #cur 指向當前節點
#表示最後一位是否有進製是
if flag>0:
cur.next = listnode(flag)#有鍊錶中最後進製的時候增加乙個節點。
return pre_node.next
單鏈表的結構如下圖所示:
在python沒有專門的指標概念,在python中每乙個變數都是指標
引用表示指向關係,只不過引用不能像指標一樣進行運算
因此,要實現鍊錶的操作,不能和c一樣直接對指標進行操作
實現鍊錶反**
#python鍊錶實現#定義乙個單鏈表
class listnode(object):
def
__init__(self):
self.val = none
self.next = none
#對鍊錶進行操作
class listnode_handle:
def
__init__(self):
self.cur_node=none
#增加新的節點操作
def
add(self
,data):
node =listnode()
node.val =data
node.next=self.cur_node
self.cur_node=node
return node
def
print_listnode(self
,node):
while node:
print('
\nnode: '
, node,
' value: '
, node.val,
' next: '
, node.next)
#鍊錶反轉
def
_reverse(self
,nodelist):
list=
#把鍊錶當中的值全部放入列表中
while nodelist:
nodelist= nodelist.next
result=listnode()#初始化鍊錶物件
result_handle = listnode_handle()#初始化鍊錶操作物件
for i in list:#遍歷列表中的資料
result =result_handle.add(i)
return result
單鏈錶兩數相加
思路很簡單,遍歷兩個鍊錶將和放入新的鍊錶之中,注意需要正確的處理進製。完整 如下 public class listnode public static listnode addtwonumbers listnode l1,listnode l2 if q null if carry 0 retur...
兩數相加leecode
兩數相加 給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。輸入 2 4 3 5 6 4 輸...
leecode試題,兩數相加
2.兩數相加 難度中等3991 給出兩個非空的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照逆序的方式儲存的,並且它們的每個節點只能儲存一位數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3...