def return_node(self, head, position):
if position == 0:
# return the node correctly
return head
else:
self.return_node(head.next_node, position - 1)
def insert_at_position(self, head, data, position):
if position == 0:
self.insert_first(head, data)
elif position == self.length:
self.insert_last(head, data)
else:
previous_node = self.return_node(head, position - 1)
# previous_node's value is None instead of the method's return value
next_node = self.return_node(head, position)
# same here
new_node = Node(data, next_node)
previous_node.next_node = new_node
self.length += 1
我试图在我的链接列表中实现一个在特定位置插入节点的方法。问题是:变量' previous_node'和' next_node'没有正确得到价值。 而不是节点值,他们得到无。谢谢你们!
答案 0 :(得分:6)
else:
self.return_node(head.next_node, position - 1)
不会返回任何内容,因为没有返回关键字。
return self.return_node(head.next_node, position - 1)
会做你想要的。
答案 1 :(得分:2)
您的变量设置为None
的原因是因为如果没有提供要返回的值,那么这是函数返回的默认值:
def foo():
pass
>>> type(foo())
<class 'NoneType'>
由于else
内的return_node()
子句未返回值,因此Python返回None
。如果要递归调用return_node
并返回后续调用返回的值,则需要使用return
:
def return_node(self, head, position):
if position == 0:
# return the node correctly
return head
else:
return self.return_node(head.next_node, position - 1) # use return