Просмотрите свой цикл, где вы снова удаляете элементы. Каждый раз, когда вы удаляете и добавляете элемент, значение, возвращаемое al.size (), уменьшается, а индекс увеличивается. Это означает, что вы будете повторять только половину времени, которое хотите.
Исправление было бы сделать это.
int size = al.size();
for(int index = 0; index < size; index++ ) {
тогда работай. Таким образом, размер не меняется.
Еще одна вещь, которую следует помнить, это то, что когда вы удаляете что-то из массива с индексом 0, индекс 1 становится индексом 0. Поэтому, возможно, было бы лучше выполнить итерацию с
int index = al.size(); index >=0 ; index--