Python 链表,删除函数迭代器


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:。您需要相应地处理边界条件。

最新更新