我正試圖編寫一個從鏈接列表中刪除所有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