我正试图编写一个从链接列表中删除所有pdf文件的函数,但是在运行后,我很快意识到它变成了一个无限循环。我的第一个while循环应该在链表的开头捕捉所有的pdf文件。我的第二个while循环应该多次遍历链表来清除PDF文件。我想我的逻辑虽然不循环是不正确的。通过链接列表迭代时无限循环Python 3
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
我得到的是没有类型未标化的第二个while循环,它混淆了我,因为它应该停止时,PTR [“未来”]是无误差。
我的链接列表如下:
{'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'。我也没有得到'while all_removed'循环。此外,该功能的返回值应该是什么?另外,你如何处理第一个元素应该被删除的情况?你只需要替换你的'lst'引用,但是这不会更新调用者的'lst'实例。 – poke
现在我返回了lst,如果你完全忽略了第二个循环,那么返回值不会返回调用者的lst,而是返回lst的新实例。 – DrJessop
@ poke我试图用while循环做什么,如果循环遇到pdf,在迭代结束时,它应该再次迭代,以确保它不会遗漏任何pdf。这是因为如果有两个相邻的pdf文件,ptr ['next'] = ptr ['next'] ['next']可能会使ptr ['next']成为pdf文件。 – DrJessop