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')
它应该返回 True,但是当我运行我的程序时,它给了我以下错误消息:
curr.nxt =curr.data.nxt
AttributeError: 'str' object has no attribute 'nxt'
任何小提示将不胜感激
您收到错误的原因是(链表的)节点的数据成员,即curr.data
是一个字符串。未定义对字符串执行.nxt
。相反,您应该做的是节点对象上的.nxt
。
您的代码还存在其他问题:
-
您说如果在列表中找到一个值,则应将其删除并返回 true。但是在你的代码中,
if curr.data == value:
有一个 return 语句,这意味着如果找到要删除的值,该方法将返回列表,而不是像你期望的那样True
。 -
此外,查看您的代码,如果它在当前节点中找不到要删除的值,它将
curr
递增到下一个节点并返回True
-
当您当前位于链表节点时,您无法从链表中删除该节点(在您的代码中似乎就是这种情况)。仅当您有一个包含前一个节点的变量时,才能执行此操作。由于在您的代码中,您没有保存上一个节点,因此您应该查看
curr.next.data
.换句话说,您应该检查if curr.next.data == value:
。您需要相应地处理边界条件。