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