python|python 单链表操作(2)--链表相加(有进位和无进位)

【python|python 单链表操作(2)--链表相加(有进位和无进位)】继续上一篇链表算法
实现单链表相加,分为有进位和无进位。


import random #定义链表节点 '''!!!!!!!本人所有的单链表操作均有一个head节点,即link本身,

link.value为None,link.next指向‘所说的’第一个节点!!!!!!!'''

以下新增内容用红色字体标出 class LinkNode(): value = https://www.it610.com/article/None next = None#链表方法类 class Link(object): #get一个新的链表,size为几个节点,默认生成链表的值在 0--9之间,可自定义 def get_link(self,size): if size <= 0 : return None #初始化要创建的链表 link = LinkNode() #表示链表的最后一个指针 last_node = link #创建size个节点并且添加到链表中 for i in range(size): value = https://www.it610.com/article/random.randint(0,9) #临时节点(生成新的节点) node = LinkNode() node.value = https://www.it610.com/article/value #将链表的最后一个指针指向新生成的节点,即链表长度加1 last_node.next = node #将链表的最后一个指针更新(保持一直作为链表的最后一个节点) last_node = node return linkdef print_link(self,link): if not link: return None if link.value =https://www.it610.com/article/= None: node = link.next else: node = links ='head' while node: ss = '-->' + str(node.value) s += ss node = node.next print (s)###############新增内容############## #无进位链表相加 def add_link_1(self,a,b): if a and not b: return a elif b and not a: return b elif not a and not b: return Nonei = a.next j = b.next link = LinkNode() last_node = link while i and j: value= https://www.it610.com/article/i.value + j.value node = LinkNode() node.value = value last_node.next = node last_node = node i = i.next j = j.next#ij中有一方到头之后,继续加上另一方剩下的节点 k = i if i else j if k : last_node.next = k returnlink #有进位的链表相加(进位加到下一个链表节点) def add_link_2(self,a,b): if a and not b: return a elif b and not a: return b elif not b and not a: return Nonelink = LinkNode() last_node = link i = a.next j = b.next #carry代表进位值(初始值为0carry = 0 while i and j: #两个节点值相加(不要忘了进位) value = https://www.it610.com/article/i.value + j.value + carry #创建临时节点 node = LinkNode() #新节点的值为余数 node.value = https://www.it610.com/article/value%10 #计算新的进位 carry = int(value/10) last_node.next = node last_node = node i = i.next j = j.next # ij中有一方到头之后,继续加上另一方剩下的节点 k = i if i else jwhile k: value = https://www.it610.com/article/k.value + carry node = LinkNode() node.value = value % 10 carry = int(value / 10) last_node.next = node last_node = node k = k.next #若最后两位的相加有进位则应该再加上一个节点,值为进位 if carry != 0 : node = LinkNode() node.value = https://www.it610.com/article/carry last_node.next = node return link#测试用例 a = Link() i = a.get_link(10) j = a.get_link(10) k = a.add_link_1(i,j) l = a.add_link_2(i,j) a.print_link(i) a.print_link(j) a.print_link(k) a.print_link(l)




    推荐阅读