实现链接列表,我希望输出为0, -1, -2, -3, ... etc.
,但它是-98, -98, -98, -98, ... etc.
,想知道我的代码有什么问题?感谢。
MAXSIZE = 100
freeListHead = None
class StackNode:
def __init__(self, value, nextNode):
self.value = value
self.nextNode = nextNode
if __name__ == "__main__":
# initialization for nodes and link them to be a free list
nodes=[StackNode(-1, None)] * MAXSIZE
freeListHead = nodes[0]
for i in range(0, len(nodes)-1):
nodes[i].nextNode = nodes[i+1]
nodes[i].value = -i
for node in nodes:
# output -98, -98, -98, -98, ... etc.
# exepcted output, 0, -1, -2, -3, ... etc.
print node.value
答案 0 :(得分:10)
这是问题所在:
# initialization for nodes and link them to be a free list
nodes=[StackNode(-1, None)] * MAXSIZE
当您使用乘法运算符时,它会为相同的对象创建多个引用,如上所述in this StackOverflow answer。因此,更改一个节点的值(如nodes[i].value = -i
)将影响每个节点,因为列表中的每个项都指向同一个对象。
在同一个链接的答案中,解决方案是使用这样的列表理解:
nodes = [StackNode(-1, None) for i in range(MAXSIZE)]
另外,请注意,您没有设置最后一个元素的值,因此输出(在我上面建议的修复之后)将是:
0, -1, -2, ..., -98, -1