这应该是一个链表,每当文件中的一行通过循环时,它就会获得一个新节点。这只是我代码的一部分,但其他一切都运行正常,所以我认为包含所有内容都不相关。
我遇到的问题是节点没有正确添加。如果我在此之后立即打印(头)并打印(头[' next']),它会打印头节点的正确信息,但对于头部[' next']它打印"无",即使有足够的行已经通过头程序[' next']来包含数据。
我按照我发现的创建链表的说明,但我一定做错了。我只是不确定它是什么。
if data[0] == "submit":
node = {}
node['data'] = data
head = node
head['next'] = None
if len(data) > 1:
if data[1] > "101":
newNode = {}
newNode = head['next']
答案 0 :(得分:0)
没有看到更多代码,你忘了将旧头分配给这个新节点
node = {}
node["data"] = data # Sets data.
node["next"] = None # sets the next to none because there is no next as the head.
head["next"] = node # set the current heads next variable to this new node.
head = head["next"] # shift head to the new node by doing this.
虽然我是面向对象代码的粉丝,虽然面向对象的代码与脚本之间存在争执,但这是定义类等的好地方,只是让它更干净,因为你已经在创建对象并分配静态密钥。
这是一个简单的课程:
class Node:
__init__(self, data):
self.data = data
self.next = None
set_next(self, node):
self.next = node
class LL:
__init__(self):
self.start = None
self.end = None
self.current = None
appendNode(self, node):
self.end.set_next(node)
self.end = self.end.next
appendData(self, data):
self.appendNode(new Node(data))
walk_list(self):
self.current = self.start
while self.current is not None:
yield self.current
self.current = self.current.next
答案 1 :(得分:0)
主要问题是你写道:
newNode = head['next']
在最后一行,它应该是:
head['next'] = newNode
以便head
字典链接到newNode
。
此外data[1] > "101"
是可疑的,因为它会执行词典比较,而不是数字。
您可以将脚本重写为:
if data[0] == "submit":
# why do you assign the entire list as 'data'?
node = {'data': data, 'next': None}
head = node
if len(data) > 1 and int(data[1]) > 101: # numerical comparison?
newNode = {}
head['next'] = newNode
newNode['data'] = data[1] # assign second element?