Как уже указывалось, одной из основных проблем является эта часть:
for(int i = 0; i < n.size(); i++)
{
stack.push(n.get(i));
n.remove(0);
}
Здесь вы всегда удаляете первый элемент из списка, но получаете элемент с индексом i
, чтобы добавить его в стек.
Давайте проанализируем это, взяв ваш список 1, 2, 3, 4, 5:
- Шаг 1:
i = 0
, поэтому вы нажимаете 1 и удаляете 1 из списка, который теперь становится 2, 3, 4, 5
- Шаг 2:
i = 1
так что вы нажимаете 3 и удаляете 2, поэтому список теперь 3, 4, 5
- Шаг 3:
i = 2
, поэтому вы нажимаете 5 и удаляете 3. Теперь список равен 4, 5 и имеет длину, меньшую i
, поэтому цикл останавливается.
Проблема: вы не настраиваете i
, чтобы приспособиться к удалению.
Как и предполагал m.k, вы можете добавить все элементы в стек и после этого удалить все.
В качестве альтернативы используйте итератор:
for( Iterator<Integer> itr = n.iterator(); itr.hasNext(); ) {
stack.push(itr.next()); //this advances the iterator so only call next() once per iteration
itr.remove(); //this removes the element from the list
}