Class 从函数传递的Python3对象
下面的代码片段用于删除链表中的节点。我的类包含两个成员,即Class 从函数传递的Python3对象,class,object,python-3.x,linked-list,Class,Object,Python 3.x,Linked List,下面的代码片段用于删除链表中的节点。我的类包含两个成员,即data和next一个指针,用于保存该类类型的其他对象。当我运行我的程序时,我没有得到任何错误。如果我试图删除链表中的第一项,它将进入第一个for循环,并显示消息“数据已找到”。但是如果我打印列表,我会看到列表中的元素。我认为这是因为重新分配了对象,但我无法找到我在哪里犯了这个错误。非常感谢您的帮助 def deleteNode(self, a_data): flag = 0 if (self.data
data
和next
一个指针,用于保存该类类型的其他对象。当我运行我的程序时,我没有得到任何错误。如果我试图删除链表中的第一项,它将进入第一个for循环,并显示消息“数据已找到”。但是如果我打印列表,我会看到列表中的元素。我认为这是因为重新分配了对象,但我无法找到我在哪里犯了这个错误。非常感谢您的帮助
def deleteNode(self, a_data):
flag = 0
if (self.data == a_data):
print("The data is found")
self = self.next
flag = 1
else:
while(self.next != None):
if (self.next.data == a_data):
self.next = self.next.next
flag = 1
break
else:
self = self.next
if(flag):
print("Data Deleted")
else:
print("Data not available")
谢谢朋友们
我修改了我的函数。我认为错误可能是因为没有将值赋回原始值,所以我使用函数返回值。除了我的意见和其他方法以及任何其他原因之外,我们都非常欢迎
def deleteNode(self, a_data):
flag = 0
if (self.data == a_data):
print("The data is found")
self = self.next
flag = 1
else:
while(self.next != None):
if (self.next.data == a_data):
self.next = self.next.next
flag = 1
break
else:
self = self.next
if(flag):
print("Data Deleted")
else:
print("Data not available")
return self
谢谢
S
self=self。代码中的下一个
对外部世界没有影响:它只分配给局部变量
看起来您正试图从节点类本身中删除节点。您可以使用一个函数,该函数接受列表头并返回一个(可能是新的)列表头,同时删除相应的项:
def delete_node(head, data):
"""Delete the first node in the `head` list that has `data`."""
prev, node = None, head
while node is not None: # until the last node (`None` means empty list)
if node.data == data: # found node that has data
if prev is None: # we are at the very beginning of the list
assert head is node
head = node.next # remove the first node
else:
assert prev.next is node
prev.next = node.next # remove internal node
break
prev, node = node, node.next
return head
我猜您将列表分配给一个变量,然后用函数修改它,然后再查看它。如果是这样,我可以提供一个答案。@IchUndNichtDu谢谢你的回复。我修改了我的函数以返回引用本身。这是我的建议。您需要将函数的返回值赋回变量是正确的。但正如J.F.塞巴斯蒂安在他的回答中指出的那样,给自己分配一些别的东西并不意味着什么。因为这只影响函数的名称空间。@IchUndNichtDu Yeah从中吸取了教训。谢谢