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

2021-10-08 07:49:55 字數 3427 閱讀 8815

「」"

方法一:整數相加法

主要思路:分別遍歷兩個鍊錶 ,求出兩個鍊錶所代表的整數的值,然後把這兩個整數進

行相加,最後把它們的和用鍊錶的形式表示出來。這種方法的優點是計算簡單,但是有個非

常大的缺點 : 當鍊表所代表的數很大的時候(超 出 了 long 的表示範圍〉,就無法使用這種方

法了。「」"

「」"主要思路 : 對鍊錶中的結點直接進行相加操作,把相加的和儲存到新的鍊錶中對應的結

點中,同時還要記錄結點相加後的進製。

「」"

class

lnode

:def

_new_

(self, x)

: self.data = x

self.

next

=none

defadd

(h1, h2)

:"""

方法功能:對兩個帶頭結點的單鏈表所代表的數相加

輸入引數: hl :第乙個煉表頭結點: h2:第二個煉表頭結點

返回值 : 相加後鍊錶的頭結點

"""if h1 is

none

or h1 .

next

isnone

:return h2

if h2 is

none

or h2.

next

isnone

:return h1

c =0 sums =

0 p1 = h1.

next

p2 = h2.

next

tmp =

none

resulthead = lnode(

) resulthead.

next

=none

p=resulthead

while p1 is

notnone

and p2 is

notnone

: tmp = lnode(

) tmp.

next

=none

sums = p1.data+p2.data+c

tmp.data = sums %

10 c = sums//

10 p.

next

= tmp

p = tmp

p1 = p1.

next

p2 = p2.

next

# 鍊錶 h2 比 hl 長,接下來只需要考慮 h2 剩餘結點的值

if p1 is

none

:while p2 is

notnone

: tmp=lnode(

) tmp.

next

=none

sums=p2.data+c

tmp.data=sums %

10 c=sums//

10 p.

next

=tmp

p=tmp

p2=p2.

next

# 鍊錶 hi 比 h2 長,接下來只需要考慮 hl 剩餘結點的值

if p2 is

none

:while p1 is

notnone

: tmp=lnode(

) tmp.

next

=none

sums=p1.data+c

tmp.data=sums%

10 c=sums/

10 p.

next

=tmp

p=tmp

p1=p1.

next

# 如果計算完成後還有進製,則增加新的結點

if c==1:

tmp=lnode(

) tmp.

next

=none

tmp.data=

1 p.

next

=tmp

return resulthead

if __name__ ==

"__main__"

: list1 =[3

,1,5

] list2 =[5

,9,2

] head1=lnode(

) head1.

next

=none

head2=lnode(

) head2.

next

=none

tmp=

none

cur=head1

addresult=

none

# 構造第乙個鍊錶

for i in list1:

tmp=lnode(

) tmp.data=i

tmp.

next

=none

cur.

next

=tmp

cur=tmp

cur=head2

# 構造第二個鍊錶

for i in list2:

tmp=lnode(

) tmp.data=i

tmp.

next

=none

cur.

next

=tmp

cur=tmp

print

("\nheadl :"

) cur=head1.

next

while cur is

notnone

:print

(cur.data,end=

" ")

cur=cur.

next

print

("\nhead2 :"

) cur=head2.

next

while cur is

notnone

:print

(cur.data,end=

" ")

cur=cur.

next

addresult=add(head1,head2)

print

("\n相加後"

) cur=addresult.

next

while cur is

notnone

:print

(cur.data,end=

" ")

cur=cur.

next

如何獲取兩個單鏈表交點

之前的一篇部落格 如何判斷兩條單鏈表是否有交點 只說了如何判斷是否有交點,但並沒有提及如何得到交點。設定陣列分別儲存兩條鍊錶所有節點的位址,然後一 一比較?可行是可行,不過空間時間複雜度太高,不建議使用。那有沒有更高效的方法呢?方法1從相交鍊錶的特點來切入分析,看看下面這張圖。一般來說,相交鍊錶會自...

1 3如何計算兩個單鏈表代表的數之和

class node def init self,data none,next none self.data data self.next next 輸出鍊錶 def print link head cur head.next while cur.next none print cur.data,e...

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

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