Python链表,删除功能iter

时间:2014-04-05 19:31:25

标签: python string linked-list

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'

任何小提示都将受到赞赏

1 个答案:

答案 0 :(得分:0)

您收到错误的原因是因为(链接列表的)节点的数据成员,即curr.data是一个字符串。没有定义对字符串执行.nxt。您应该做的是,节点对象上的.nxt

您的代码也存在其他问题:

  • 你说如果在列表中找到一个值,它应该删除它并返回true。但是在你的代码中,if curr.data == value:中有一个return语句,这意味着如果找到要删除的值,该方法将返回列表而不是True,正如你期望的那样。

  • 此外,查看代码,如果在当前节点中找不到要删除的值,它会将curr递增到下一个节点并返回True

  • 当您当前在该节点时,您无法从链接列表中删除节点(在您的代码中似乎就是这种情况)。只有拥有包含前一个节点的变量时,才能执行此操作。由于在您的代码中,您不保存上一个节点,因此您应该查看curr.next.data。换句话说,你应该检查if curr.next.data == value:。您需要相应地处理边界条件。