题目描述
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
下面为链表模块代码,内包含操作列表的几种方法:
class Node():
def __init__(self, data, pnext = None):
self.data = data
self._next = pnext
def __repr__(self):
return str(self.data)
class ChainTable():
def __init__(self):
self.head = None
self.length = 0
def isEmpty(self):
return (self.length == 0)
def append(self, dataOrNode):
item = None
if isinstance(dataOrNode, Node):
item = dataOrNode
else:
item = Node(dataOrNode)
if not self.head:
self.head = item
self.length += 1
else:
node = self.head
while node._next:
node = node._next
node._next = item
self.length += 1
def delete(self, index):
if self.isEmpty():
print ("this chain table is empty.")
return
if index < 0 or index >= self.length:
print ('error: out of index')
return
if index == 0:
self.head = self.head._next
self.length -= 1
return
j = 0
node = self.head
prev = self.head
while node._next and j < index:
prev = node
node = node._next
j += 1
if j == index:
prev._next = node._next
self.length -= 1
def insert(self, index, dataOrNode):
if self.isEmpty():
print ("this chain tabale is empty")
return
if index < 0 or index >= self.length:
print ("error: out of index")
return
item = None
if isinstance(dataOrNode, Node):
item = dataOrNode
else:
item = Node(dataOrNode)
if index == 0:
item._next = self.head
self.head = item
self.length += 1
return
j = 0
node = self.head
prev = self.head
while node._next and j < index:
prev = node
node = node._next
j += 1
if j == index:
item._next = node
prev._next = item
self.length += 1
def update(self, index, data):
if self.isEmpty() or index < 0 or index >= self.length:
print ('error: out of index')
return
j = 0
node = self.head
while node._next and j < index:
node = node._next
j += 1
if j == index:
node.data = data
def getItem(self, index):
if self.isEmpty() or index < 0 or index >= self.length:
print ("error: out of index")
return
j = 0
node = self.head
while node._next and j < index:
node = node._next
j += 1
return node.data
def getIndex(self, data):
j = 0
if self.isEmpty():
print ("this chain table is empty")
return
node = self.head
while node:
if node.data == data:
return j
node = node._next
j += 1
if j == self.length:
print ("%s not found" % str(data))
return
def clear(self):
self.head = None
self.length = 0
def __repr__(self):
if self.isEmpty():
return "empty chain table"
node = self.head
nlist = ''
while node:
nlist += str(node.data) + ' '
node = node._next
return nlist
def __getitem__(self, index):
if self.isEmpty() or ind < 0 or index >= self.length:
print ("error: out of index")
return
return self.getItem(index)
def __setitem__(self, index, val):
if self.isEmpty() or ind < 0 or index >= self.length:
print ("error: out of index")
return
self.update(index, val)
def __len__(self):
return self.length
将此模块导入到程序的主代码中:
import lianbiao as c
l1=c.ChainTable()
message1=0
while message1 <10:
message1=input("write a number ")
message1=int(message1)
if message1 <10:
l1.append(message1)
print(l1)
l2=c.ChainTable()
message2=0
while message2 <10:
message2=input("write a number ")
message2=int(message2)
if message2 <10:
l2.append(message2)
print(l2)
len1=int(l1.length)
len2=int(l2.length)
if len1<len2:
for i in range(len2-len1):
l1.append('0')
elif len1>len2:
for i in range(len1-len2):
l2.append('0')
len=int(l1.length)
i=1
update=0
add=[1,2,3,4,5,6,7,8,9,10]
while i<=len:
add[i]=l1.getItem(i-1)+l2.getItem(i-1)+update
if add[i] >=10:
add[i]=add[i]%10
i=i+1
update=1
else:
i=i+1
update=0
l3=c.ChainTable()
i=1
while i<=len:
l3.append(add[i])
i=i+1
print(l3)
结果为:
链表每个节点只存储一位数,当输入两位数时,自动结束输入。