生活随笔
收集整理的這篇文章主要介紹了
两个单链表生成相加链表
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目:
假設(shè)鏈表中每一個(gè)節(jié)點(diǎn)的值都在0~9之間,那么鏈表整體就可以代表一個(gè)整數(shù)。?
例如:9 -> 3 -> 7,可以代表整數(shù)937。?
給定兩個(gè)這種鏈表的頭節(jié)點(diǎn)head1和head2,請(qǐng)生成代表兩個(gè)整數(shù)相加值的結(jié)果鏈表。?
例如:鏈表1為9 -> 3 -> 7,鏈表2為6 -> 3,最后生成新的結(jié)果鏈表為1 -> 0 -> 0 -> 0。
基本思路:
容易想到的方法是先將兩個(gè)鏈表的值表示出來(lái),然后將兩個(gè)值累加起來(lái),再根據(jù)累加結(jié)果生成一個(gè)新鏈表。這種方法實(shí)際是不可行的,因?yàn)殒湵淼拈L(zhǎng)度可以很長(zhǎng),表示的數(shù)字可以很大,容易出現(xiàn)int類型溢出。
方法一。利用兩個(gè)棧,分別將鏈表1、2的值壓入棧中,這樣就生成了兩個(gè)鏈表的逆序棧。將兩個(gè)棧同時(shí)彈出,這樣就相當(dāng)于兩個(gè)鏈表從低位到高位依次彈出,在這個(gè)過(guò)程中生成相加鏈表即可。注意相加過(guò)程中的進(jìn)位問(wèn)題。
?
class Node:def __init__(self,value):self.value = valueself.next = Nonedef addList(head1,head2):if head1 == None or head2 == None:return s1 = []s2 = []while head1!=None:s1.append(head1.value)head1 = head1.nextwhile head2!=None:s2.append(head2.value)head2 = head2.nextn1,n2,n,ca = 0,0,0,0pre,node = None,Nonewhile len(s1)!=0 or len(s2)!=0:if len(s1)==0:n1 = 0else:n1 = s1.pop()if len(s2)==0:n2 = 0else:n2 = s2.pop()n = n1 + n2 + capre = nodenode = Node(n%10)node.next = preca = n//10if ca == 1:pre = nodenode = Node(1)node.next = prereturn node
"""方法二、將鏈表逆序求解,可以節(jié)省棧空間"""def addList2(head1,head2):if head1 == None or head2 == None:returnhead1 = reverseList(head1)head2 = reverseList(head2)ca,n1,n2,n = 0,0,0,0c1,c2,node,pre = head1,head2,None,Nonewhile c1!=None or c2!=None:if c1!=None:n1 = c1.valueelse:n1 = 0if c2!=None:n2 = v2.valueelse:n2 = 0n = n1 + n2 + capre = nodenode = Node(n%10)node.next = preca = n//10if c1!=None:c1 = c1.nextelse:c1 = Noneif c2!=None:c2 = c2.nextelse:c2 = Noneif ca == 1:pre = nodenode = Node(1)node.next = prereverseList(head1)reverseList(head2)return nodedef reverseList(head):pre,next_ = None,Nonewhile head!=None:next_ = head.nexthead.next = prepre = headhead = next_return pre
?
總結(jié)
以上是生活随笔為你收集整理的两个单链表生成相加链表的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。