Как реализовать метод poll в один цикл?

Есть реализация очереди на основе двух стеков, использую два цикла, первый перекладывает элементы из одного стека в другой, пока не дойдет до последнего, его запоминает, удаляет и возвращает, затем элементы перекладываются обратно для дальнейших операций.
Как сделать, чтобы в методе poll был один цикл?

public class SimpleQueue<T> {
    int count = 0;
    private final SimpleStack<T> in = new SimpleStack<>();
    private final SimpleStack<T> out = new SimpleStack<>();
/*
 * Метод poll() - должен возвращать первое значение и удалять его из коллекции.
 */
    public T poll() {
        for (int i = 0; i < count - 1; i++) {
            in.push(out.pop());
        }
        count--;
        T rsl = out.pop();
        for (int i = 0; i < count; i++) {
            out.push(in.pop());
        }
        return rsl;
    }
  • Вопрос задан
  • 129 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Каноничная реализация ничего не перекладывает обратно.
У тебя имена странные, я бы их поменял.
enqueue должен ложить в in
poll должен перекладывать из in в out до тех пор, пока in непуст. out.push(in.pop())
результат poll будет out.pop()

public void enqueue(T value){
    in.push(value);
}
public T poll() {
    while(!in.isEmpty()) {
        out.push(in.pop());
    }
    if (out.isEmpty()) throw new NoSuchElementException();
    return out.pop();
    }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы