python - 不打印结果链表 - Python
问题描述
问题是(来自:'破解编码面试'):
您有两个由链表表示的数字,其中每个节点包含一个数字。数字以相反的顺序存储,因此 1 的数字位于列表的头部。编写一个函数,将两个数字相加并以链表的形式返回总和。
示例
输入:(3 -> 1 -> 5) + (5 -> 9 -> 2)
输出:8 -> 0 -> 8
我的代码是:
#Define node and convenience methods
class Node(object):
def __init__(self,data = None, next_node = None):
self.data = data
self.next_node = next_node
def get_data(self):
return self.data
def get_next(self):
return self.next_node
def set_next(self, new_next):
self.next_node = new_next
#Make first linked list
class LinkedList1(object):
def __init__(self, head = None):
self.head = head
def insert(self, data):
new_node = Node(data)
new_node.set_next(self.head)
self.head = new_node
#iterate through the list and save a list of the numbers
def iterate(self):
current = self.head
list1 = []
while current:
list1.append(current.get_data())
current = current.get_next()
return list1
#Define second linked list
class LinkedList2(object):
def __init__(self, head = None):
self.head = head
def insert(self, data):
new_node = Node(data)
new_node.set_next(self.head)
self.head = new_node
#iterate through the list and save a list of the numbers
def iterate(self):
current = self.head
list2 = []
while current:
list2.append(current.get_data())
current = current.get_next()
return list2
object1 = LinkedList1()
object2 = LinkedList2()
#Define resulting linked list and print it
class New(object):
def __init__(self,head = None):
self.head = head
def linked_list(self, new_list1):
for i in new_list1:
new_node = Node(i)
new_node.set_next(self.head)
self.head = new_node
def printing(self):
current = self.head
while current:
print(current.get_data(), end = " ")
current = current.get_next()
return
no1 = object1.iterate()
no2 = object2.iterate()
new_list = []
#Calculate sum recursively
def sum_calc(carry):
sum1 = 0
while no1 and no2:
sum1 = no1.pop(0) + no2.pop(0) + carry
if sum1 > 10:
new_list.append(sum1 % 10)
sum_calc(1)
else:
new_list.append(sum1)
sum_calc(0)
#If any elements left in no1
if no1:
new_list.extend(no1)
#If any elements left in no2
elif no2:
new_list.extend(no2)
else:
return new_list
object3 = New()
passing = []
while True:
print("1.Insert in list 1")
print("2.Insert in list 2")
print("3.Sum")
print("4.New List of sum")
print("5.Exit")
option = (int)(input("option: "))
if option == 1:
data = (int)(input("Data: "))
object1.insert(data)
elif option == 2:
data = (int)(input("Data: "))
object2.insert(data)
elif option == 3:
#Initial carry = 0 when adding unit's digits
passing = sum_calc(0)
elif option == 4:
object3.linked_list(passing)
object3.printing()
print()
else:
break
但是每当option ==4
它不打印任何东西并进入while循环的下一次迭代时。
我知道这不是最好的解决方案,但任何人都可以帮忙指出算法思维中的错误或任何错误吗?谢谢!
解决方案
推荐阅读
- python - 在python中的撇号之前删除额外的空间
- mule - 基于条件的mule 4中的dataweave2.0转换
- c - 在 C 中,如何使用“make functionName”之类的 makefile 只编译一个函数(需要自定义库中的函数)?
- c - 将文本文件的名称传递给多个函数时的无限循环
- django - custom.methods.wrap 没有返回 HttpResponse 对象。它返回 None 而不是
- arrays - VBA - 来自数组的自定义数字格式 - 特定数组编号后的错误
- node.js - 在 NodeJS 中模拟调用 aws ssm 的最佳方法是什么?
- kotlin - 将 kotlinx.serialization 库与 Bazel 的 rules_kotlin 一起使用
- c++ - 为什么在以下代码中的每个输出后都会得到 32767?
- laravel - Laravel - 输入“结束日期”必须晚于“开始日期”