LeetCode2-两数相加(Python语言)

题目描述
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 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)

结果为:
在这里李插入图片描述
链表每个节点只存储一位数,当输入两位数时,自动结束输入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值