遍历链表时的无限循环 Python 3.



我正在尝试编写一个从链表中删除所有pdf文件的函数,但是在运行此函数后,我很快意识到它变成了一个无限循环。我的第一个while循环应该捕获链表开头的所有pdf文件。我的第二个while循环应该遍历链表,因为它需要摆脱pdf文件。我想我的逻辑虽然不是循环是不正确的。

def remove_all(lst):
ptr = lst
while ptr['data'][0] == 'pdf':
ptr = ptr['next']
lst = ptr
all_removed = True
while not all_removed:
all_removed = False
while ptr['next'] != None:
if ptr['next']['data'][0] == 'pdf':
ptr['next'] = ptr['next']['next']
all_removed = True
ptr = ptr['next']
return lst

我收到错误,即 none 类型对于第二个 while 循环不可下标,这让我感到困惑,因为它应该在 ptr['next'] 为 None 时停止。

我的链表如下所示:

{'data': ['pdf', 2, 4], 'next': {'data': ['csv', 1, 1], 'next': {'data': ['pdf', 234, 53], 'next': 
{'data': ['xml', 1, 2], 'next': {'data': ['pdf', 0, 1], 'next': None}}}}}

首先,尝试:

ptr['next'] = ptr['next']['next']

而不是:

ptr['next'] == ptr['next']['next']

其次,由于我们的结构中有一个'next': {'data': ['xml', 1, 2](带有xmlcsv- 而不是pdf(,执行进入嵌套的 while 循环:

while ptr['next'] != None:

由于 if 条件if ptr['next']['data'][0] == 'pdf':计算结果为False,因此它会无限地卡在循环中。

鉴于我不完全理解,虽然不是,但真正的循环,我诉诸递归来回答我的问题。

def remove(lst):
ptr=lst
while ptr['data'][0]=='pdf':
ptr=ptr['next']
lst=ptr
while ptr['next']!=None:
if ptr['next']['data'][0]=='pdf':
ptr['next']=ptr['next']['next']
return remove(lst)
ptr=ptr['next']
return lst

如果列表开头有任何pdf,它们将被删除,然后如果以后遇到任何pdf,它们将被删除,并且函数返回自身以防万一有相邻的pdf。

相关内容

  • 没有找到相关文章

最新更新