Это обычная проблема на многих языках. Если у вас есть линейная структура данных, и вы повторяете ее, что-то должно отслеживать, где вы находитесь в структуре. Это может быть текущий индекс или указатель, но это какой-то палец, указывающий на «текущее место».
Если вы изменяете список во время итерации, этот курсор, вероятно, будет неправильным.
Общей проблемой является то, что вы удаляете элемент под курсором, все слайд вниз, следующая итерация цикла увеличивает курсор и вы случайно пропустили элемент.
Некоторые реализации структуры данных предлагают возможность удалять элементы во время итерации, но большинство из них не работает.