Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python链表,删除函数iter_Python_String_Linked List - Fatal编程技术网

Python链表,删除函数iter

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

此函数用于删除给定的值,并返回布尔值(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
            return lst
        curr = curr.nxt
        return True
    return False
它应该返回True,但当我运行程序时,它会给我以下错误消息:

remove(lstA, 'b')

任何小小的提示都值得欣赏。

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

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

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

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

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


我试着按照你说的检查cure.next.data==value:,似乎在工作,但它没有输出布尔值,而是在输出。
意味着
中的
返回lst
,如果执行
块。检查我的第1点,了解为什么您的代码不会返回
True
ohh,我明白了,所以只需将lst更改为True,现在它会返回,但是如果我想从列表中删除一个不存在的元素,该怎么办?它应该返回False,但对于我的代码,它不会返回任何内容
       curr.nxt =curr.data.nxt
AttributeError: 'str' object has no attribute 'nxt'