我正在尝试编写一个从链表中删除所有pdf文件的函数,但是在运行之后,我很快意识到它变成了一个无限循环。我的第一个while循环应该捕获链表开头的所有pdf文件。我的第二个while循环应该遍历链表,多次遍历pdf文件。我想我的逻辑虽然不是循环不正确。
List<City> filtered_events = new ArrayList<>();
if (filtered_categories.size() > 0) {
for (String c : filtered_categories) {
for (City city: events) {
if (c.equalsIgnoreCase(city.getCat_id())) {
filtered_events.add(city);
}
}
}
}
if (filtered_cities.size() > 0) {
for (String c : filtered_cities) {
for (City city: events) {
if (c.equalsIgnoreCase(city.getCity_id())) {
filtered_events.add(city);
}
}
}
}
我得到的错误是第二个while循环没有类型不可订阅,这让我感到困惑,因为它应该在ptr ['next']为None时停止。
我的链接列表如下所示:
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
答案 0 :(得分:1)
首先,试试:
ptr['next'] = ptr['next']['next']
而不是:
ptr['next'] == ptr['next']['next']
其次,由于我们的结构中有'next':
{'data': ['xml', 1, 2]
(xml
和csv
- 而不是pdf
),执行会进入嵌套的while循环:
while ptr['next'] != None:
并且由于if条件if ptr['next']['data'][0] == 'pdf':
的计算结果为False
,它会无限地陷入循环。
答案 1 :(得分:0)
鉴于我没有完全理解,而不是真正的循环,我使用递归来回答我的问题。
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&#39; s。