Python链表查询

Python链表查询,python,object,linked-list,Python,Object,Linked List,以下是我遇到一些问题的代码: class Node(object): def __init__(self, data): self.data = data self.next = None class Solution(object): def insert(self, head, data): if head == None: head = Node(data) else:

以下是我遇到一些问题的代码:

class Node(object):
    def __init__(self, data):
        self.data = data
        self.next = None

class Solution(object):
    def insert(self, head, data):
        if head == None:
            head = Node(data)
        else:
            current = head
            while current.next:
                current = current.next
            current.next = Node(data)
        return head

    def display(self, head):
        current = head
        while current:
            print(current.data)
            current = current.next
代码本身工作正常,但我在理解插入函数时遇到了困难。最初,

Head == None
因此,将使用参数数据创建一个新节点,从现在起,这将是新的头。因此,如果我尝试将新节点添加到此列表中,则会触发else并创建新节点:

current.next 
是创建的。到现在为止,一直都还不错。现在,如果我想添加另一个节点,else条件将再次触发,但正在创建一个新的当前对象,这是否会覆盖旧当前对象的内存,从而覆盖当前对象的内存?程序如何拥有以前节点的内存


不,不创建新的current对象,而是重新分配变量current,直到它到达列表中的最后一个元素,然后才创建新的Node对象并分配到列表的末尾。

current是指向Node对象的局部变量。覆盖current不会破坏节点,它只是使current指向其他对象。只要你有电流指向的参考,你就没事。在这种情况下,因为您保持了head,所以您始终能够按自己的方式浏览列表。

请注意,将对象绑定到名称就像按值传递引用一样。不创建新对象,只创建对现有对象的新引用
current=current。next
不复制
current。next
,它只分配
current引用的对象。next
现在被
current
引用。我不得不选择其他答案中的一个作为最佳答案,但您的评论帮助我理解了最多,谢谢@MisterMiyagi