删除 python 中的整个链表
Deleting entire linked list in python
我编写了一个创建单个链表的程序,现在我正试图删除整个链表。
首先,我将 self.head 分配给一个名为 current 的变量,但该函数不起作用,程序打印了整个列表。
"""
def deleteLinkedList(self):
current = self.head
while current is not None:
nextNode = current.next
current = None
current = nextNode
"""
结果:
但是,当我更改代码时,打印列表的程序是空的。
新代码:
"""
def deleteLinkedList(self):
while self.head is not None:
nextNode = self.head.next
self.head = None
self.head = nextNode
"""
结果:
我不明白为什么第二个代码有效而第一个无效。为什么当我使用变量而不是 self.head 时节点没有被删除?
如果你打印 current 和 self.head 的内存地址,你会发现它们是不一样的,因为当你做 current = None 时,current 指向另一个内存 case(其中包含None 值)但它不会影响您的 self.head 变量。这就是为什么您的第一个代码列表不为空的原因。
def delete(self):
current = self.head
print("current adress = " + hex(id(current)))
print("self.head adress = " + hex(id(self.head)))
while current is not None:
nextNode = current.next
current = None
print("current adress = " + hex(id(current)))
print("self.head adress = " + hex(id(self.head)))
current = nextNode
输出:
current adress = 0x7f9304ecdcd0 //print before while current = self.head so same address
self.head adress = 0x7f9304ecdcd0
current adress = 0x90a9f0 //current = None so current address change
self.head adress = 0x7f9304ecdcd0 //self.head doesn't change
current adress = 0x90a9f0
self.head adress = 0x7f9304ecdcd0
我编写了一个创建单个链表的程序,现在我正试图删除整个链表。
首先,我将 self.head 分配给一个名为 current 的变量,但该函数不起作用,程序打印了整个列表。
"""
def deleteLinkedList(self):
current = self.head
while current is not None:
nextNode = current.next
current = None
current = nextNode
"""
结果:
但是,当我更改代码时,打印列表的程序是空的。
新代码:
"""
def deleteLinkedList(self):
while self.head is not None:
nextNode = self.head.next
self.head = None
self.head = nextNode
"""
结果:
我不明白为什么第二个代码有效而第一个无效。为什么当我使用变量而不是 self.head 时节点没有被删除?
如果你打印 current 和 self.head 的内存地址,你会发现它们是不一样的,因为当你做 current = None 时,current 指向另一个内存 case(其中包含None 值)但它不会影响您的 self.head 变量。这就是为什么您的第一个代码列表不为空的原因。
def delete(self):
current = self.head
print("current adress = " + hex(id(current)))
print("self.head adress = " + hex(id(self.head)))
while current is not None:
nextNode = current.next
current = None
print("current adress = " + hex(id(current)))
print("self.head adress = " + hex(id(self.head)))
current = nextNode
输出:
current adress = 0x7f9304ecdcd0 //print before while current = self.head so same address
self.head adress = 0x7f9304ecdcd0
current adress = 0x90a9f0 //current = None so current address change
self.head adress = 0x7f9304ecdcd0 //self.head doesn't change
current adress = 0x90a9f0
self.head adress = 0x7f9304ecdcd0