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'
任何小提示都将受到赞赏
答案 0 :(得分:0)
您收到错误的原因是因为(链接列表的)节点的数据成员,即curr.data
是一个字符串。没有定义对字符串执行.nxt
。您应该做的是,节点对象上的.nxt
。
您的代码也存在其他问题:
你说如果在列表中找到一个值,它应该删除它并返回true。但是在你的代码中,if curr.data == value:
中有一个return语句,这意味着如果找到要删除的值,该方法将返回列表而不是True
,正如你期望的那样。
此外,查看代码,如果在当前节点中找不到要删除的值,它会将curr
递增到下一个节点并返回True
当您当前在该节点时,您无法从链接列表中删除节点(在您的代码中似乎就是这种情况)。只有拥有包含前一个节点的变量时,才能执行此操作。由于在您的代码中,您不保存上一个节点,因此您应该查看curr.next.data
。换句话说,你应该检查if curr.next.data == value:
。您需要相应地处理边界条件。