【问题标题】:python linked list evaluation on the node of self自我节点上的python链表评估
【发布时间】:2013-02-24 03:43:41
【问题描述】:

我建立了两个链表,但第二个函数丢失了链接。 我可以看到我对自己没有任何东西,但是它怎么会失去其父级的链接。 因为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: 10 1 2 3 4 5 6 7 8 9 链接2: 10

【问题讨论】:

    标签: python linked-list


    【解决方案1】:

    问题出在这样的部分。

    def buildLink2(self):
        temp=1
        while temp<10:
            self=self.next
            self=Node(temp)
            temp+=1
    

    self 是对当前对象的引用,但它并不特殊(除了按照惯例),当你分配给它时,python 使它成为一个局部变量。

    那么这里发生了什么,您是否将self 设置为对self.next 引用的引用(在本例中为None),然后将self 设置为指向一个新的@ 987654327@ 对象。下一次循环时,您在执行任何操作之前再次将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
    

    【讨论】:

      猜你喜欢
      • 2013-07-24
      • 1970-01-01
      • 1970-01-01
      • 2014-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-29
      • 1970-01-01
      相关资源
      最近更新 更多