「」"
方法一:整數相加法
主要思路:分別遍歷兩個鍊錶 ,求出兩個鍊錶所代表的整數的值,然後把這兩個整數進
行相加,最後把它們的和用鍊錶的形式表示出來。這種方法的優點是計算簡單,但是有個非
常大的缺點 : 當鍊表所代表的數很大的時候(超 出 了 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...