Python链表,删除函数iter
此函数用于删除给定的值,并返回布尔值(True)。例如,如果我输入:Python链表,删除函数iter,python,string,linked-list,Python,String,Linked List,此函数用于删除给定的值,并返回布尔值(True)。例如,如果我输入: def remove(lst,value): curr = lst.head while not isinstance(curr, EmptyNode): if curr.data == value: curr.data=curr.nxt.data curr.nxt =curr.data.nxt lst.size -= 1
def remove(lst,value):
curr = lst.head
while not isinstance(curr, EmptyNode):
if curr.data == value:
curr.data=curr.nxt.data
curr.nxt =curr.data.nxt
lst.size -= 1
return lst
curr = curr.nxt
return True
return False
它应该返回True,但当我运行程序时,它会给我以下错误消息:
remove(lstA, 'b')
任何小小的提示都值得欣赏。您得到错误的原因是节点(链接列表)的数据成员,即,
curr.data
是一个字符串。未定义对字符串执行.nxt
。相反,您应该在节点对象上执行.nxt
您的代码还存在其他问题:
- 您说如果在列表中找到一个值,它应该删除它并返回true。但是在代码中,
中有一个return语句,这意味着如果找到要删除的值,该方法将返回列表,而不是您所期望的if curr.data==value:
True
- 此外,查看代码,如果在当前节点中找不到要删除的值,它会将
增加到下一个节点,并返回curr
True
- 当您当前处于某个节点时,无法从链接列表中删除该节点(代码中似乎就是这种情况)。只有在具有保存前一个节点的变量时,才能执行此操作。因为在代码中,您没有保存上一个节点,所以应该查看
。换句话说,如果curr.next.data==value:,您应该检查curr.next.data
。您需要相应地处理边界条件
意味着中的返回lst
,如果执行块。检查我的第1点,了解为什么您的代码不会返回True
ohh,我明白了,所以只需将lst更改为True,现在它会返回,但是如果我想从列表中删除一个不存在的元素,该怎么办?它应该返回False,但对于我的代码,它不会返回任何内容
curr.nxt =curr.data.nxt
AttributeError: 'str' object has no attribute 'nxt'