Java ArrayDeque Ошибка и методы опроса - PullRequest
0 голосов
/ 31 октября 2019

В настоящее время я пишу реализацию ArrayDeque. Я работаю над методами pollFirst, pollLast, removeFirst и removeLast. Я не совсем уверен, правильны ли мои методы, которые я написал, или нет. Я написал драйвер для проверки этих методов, и я не уверен, что вывод правильный.

Драйвер можно найти здесь: https://pastebin.com/bH0D78jG

Вот следующие методы:

pollFirst:

T result = (T) deque[head]; // Element is null if deque empty
    if (result == null)
        return null;
    deque[head] = null;     // Must null out slot
    head = (head + 1) & (deque.length - 1);
    return result;

pollLast:

    int t = (tail - 1) & (deque.length - 1);
    T result = (T) deque[t];
    if (result == null)
        return null;
    deque[t] = null;
    tail = t;
    return result;

removeFirst

    T x = pollFirst();
    if (x == null)
        throw new NoSuchElementException();
    return x;

removeLast

    T x = pollLast();
    if (x == null)
        throw new NoSuchElementException();
    return x;

это изображение примера вывода

вещь, которую я 'Больше всего меня интересуют методы и способ вывода массива после pollFirst и pollLast. Разве не должно быть нуля на каждом конце deque?

1 Ответ

0 голосов
/ 31 октября 2019

Проблема в вашем pollLast методе. В методе peekLast вы используете tail в качестве индекса последнего элемента в deque, но в методе pollLast вы используете tail - 1 в качестве индекса этого элемента. Это означает, что вы удаляете (и обнуляете) второй элемент из последнего вместо последнего.

Чтобы исправить ошибку, измените строку T result = (T) deque[t]; на T result = (T) deque[tail];.

...