以下代码段用于删除链接列表中的节点。我的类包含两个成员,即data
和next
一个指针,用于保存该类类型的其他对象。什么时候,我运行我的程序,我没有得到任何错误。如果我尝试删除链表中的第一项,它将进入First 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")
由于
答案 0 :(得分:1)
self = self.next
对外界没有影响:它只是分配给本地变量。
看起来您正在尝试从Node类本身中删除节点。您可以使用一个接受列表头的函数,并返回一个(可能是新的)列表头,并删除相应的项目:
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
答案 1 :(得分:0)
友
我修改了我的功能。我认为错误可能是因为没有将值赋给原始值,所以我让我的函数返回值。我们热烈欢迎您的评论和其他方法以及任何其他原因。
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
由于 小号