python實現計算兩個單鏈表所代表的數之和

2021-10-08 15:25:53 字數 2367 閱讀 9184

華為筆試

題目描述:

給定兩個單鏈表,鍊錶的每個結點代表一位數,計算兩個數的和。例如 :輸入鍊錶 (3一》

1一》5)和鍊錶(5一》9一》2),輸出 : 8->0->8, 即 513+295=808, 注意個位數在煉表頭。

鍊錶相加法

主要思路 : 對鍊錶中的結點直接進行相加操作,把相加的和儲存到新的鍊錶中對應 的結 點中,同時還要記錄結點相加後的進製。 如下圖所示 :

使用這種方法需要注意如下幾個問題: cl)每組結點進行相加後需要記錄其是否有進製 ; (2)如果兩個鍊錶 hl 與 h2 的長度不同(長度分別為 ll 和 l2,且 ll實現主要功能:

def doublelinkadd(head1, head2):

# 如果有乙個鍊錶為空,直接返回另外乙個鍊錶

if head1 is none:

return head2

if head2 is none:

return head1

# 引入變數及初始化,c表示進製,resultlink儲存相加後的節點,cur1, cur2為操作的指標

c = 0

resultlink = linkedlist()

cur1 = head1

cur2 = head2

# 迴圈依次相加對應節點的值,結果新增到resultlink

while cur1 is not none and cur2 is not none:

sums = cur1.item + cur2.item + c

c = sums // 10 # 整除,例:27//10=2, 表示進製

tmp = sums % 10 # 取餘,例:27%10=7,表示相加結果的個位數的值

resultlink.add(tmp)

cur1 = cur1.next

cur2 = cur2.next

# 如果鍊錶1更長,將剩餘節點加入到結果鍊錶中

if cur1 is not none:

while cur1:

sums = cur1.item + c

c = sums // 10

tmp = sums % 10

resultlink.add(tmp)

cur1 = cur1.next

# 如果鍊錶2更長,將剩餘節點加入到結果鍊錶中

if cur2 is not none:

while cur2:

sums = cur2.item + c

c = sums // 10

tmp = sums % 10

resultlink.add(tmp)

cur2 = cur2.next

# 判斷是否還有進製,有進製則加入鍊錶

if c > 0:

resultlink.add(c)

return resultlink

測試:

if __name__ == "__main__":

print("**********==link1**********=")

link1 = linkedlist()

link1.add(3)

link1.add(4)

link1.add(5)

link1.add(6)

link1.add(7)

link1.add(8)

link1.print_link()

print("**********==link2**********=")

link2 = linkedlist()

link2.add(9)

link2.add(8)

link2.add(7)

link2.add(6)

link2.add(5)

link2.print_link()

print("**********==resultlink**********=")

doublelinkadd(link1._head, link2._head).print_link()

輸出:

**********==link1**********=34

5678

**********==link2**********=98

765**********==resultlink**********=23

3339

單鏈表操作之合併兩個單鏈表

本篇部落格為合併兩個單鏈表,有序和無序都可以 其中用到單鏈表的尾插和單鏈表的選擇排序 中大部分操作都在單鏈表基本操作詳解中介紹過,這裡就直接上 include include includetypedef int datatype typedef struct linknode linknode,p...

python如何計算兩個單鏈表所代表的數之和

方法一 整數相加法 主要思路 分別遍歷兩個鍊錶 求出兩個鍊錶所代表的整數的值,然後把這兩個整數進 行相加,最後把它們的和用鍊錶的形式表示出來。這種方法的優點是計算簡單,但是有個非 常大的缺點 當鍊表所代表的數很大的時候 超 出 了 long 的表示範圍 就無法使用這種方 法了。主要思路 對鍊錶中的結...

合併兩個有序單鏈表

include using namespace std typedef struct nodenode,linklist void creatlist linklist l void insert int n,node p void show linklist l cout num head2 ne...