我构建了两个链表,但第二个函数丢失了链接。我可以看到我没有自我,但它怎么会失去与父母的联系呢。因为None是一个独立的内存地址?
class Node:
def __init__(self,data):
self.next=None
self.data=data
def buildLink1(self):
temp=1
while temp<10:
self.next=Node(temp)
self=self.next
temp+=1
def buildLink2(self):
temp=1
while temp<10:
self=self.next
self=Node(temp)
temp+=1
def traverse(self):
while self:
print self.data
self=self.next
if __name__=='__main__':
print "link 1:"
root1=Node(10)
root1.buildLink1()
root1.traverse()
print "link 2:"
root2=Node(10)
root2.buildLink2()
root2.traverse()
输出:链接1:101.2.3.4.5.6.7.8.9链接2:10
问题就在这样的部分。
def buildLink2(self):
temp=1
while temp<10:
self=self.next
self=Node(temp)
temp+=1
self
是对当前对象的引用,但它不是特殊的(除了约定(,并且当您为其赋值时,python会使其成为局部变量。
这里发生的是,将self
设置为对self.next
引用的对象的引用(在本例中为None
(,然后将self
设置为指向新的Node
对象。下一次通过循环时,在执行任何操作之前,将self
再次指向None
。
我认为您真的不希望这些函数是实例方法,而是类方法或独立方法。例如:
def build_link(first_node):
cur_node = first_node
for tmp in range(10):
cur_node.next = Node(tmp)
cur_node = cur_node.next