Написание функции dequeue () путем обхода связанного списка в Java - PullRequest
0 голосов
/ 27 февраля 2020

Очередь реализована с использованием односвязного списка.

Переменная back "указывает" на первый узел в связанном списке. Новые элементы добавляются (ставятся в очередь) сзади.

Переменная передняя "указывает" на последний узел в связанном списке. Элементы удаляются (удаляются из очереди) с фронта.

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

Я написал функцию enqueue (), однако не уверен, что я делаю неправильно с dequeue ( ). Я должен добраться до фронта, который является последним узлом, чтобы удалить его из очереди. Поэтому я должен пройти через узел, чтобы удалить и вернуть элемент в начало очереди.

 //Node stuff
private Node front, back;
static class Node {
    public Node (char item, Node next) { this.item = item; this.next = next; }
    public char item;
    public Node next;
    }

функция удаления: требуется работа

public char dequeue() {

    char item;

    if (back.item == front.item) {
    item = front.item; 
    back = null;
    }
    for (Node tmp = back; tmp != null; tmp= tmp.next){
    if (tmp.next == null){ 
        item = tmp.item; 
        back.next = null; 
    }
    }
    return item; 
}

Я создал символ для хранения значения элемента, который я собираюсь удалить ... Моя проблема заключается в удалении последнего узла из списка. Я не уверен, как это сделать, не получив исключение Null Pointer. Любой вклад будет высоко ценится!

1 Ответ

0 голосов
/ 27 февраля 2020

Условие if срабатывает, когда вы находитесь на последнем узле, и в этом случае вы хотите сохранить значение этого узла и удалить его из списка. Вы сохраняете значение, но тогда почему вы устанавливаете обратно. net в ноль? Разве вы не хотите установить рядом с предыдущим узлом tmp значение null? Разве установка back.next не обнуляет весь список?

И извините за первый комментарий, парень явно не прочитал ваш вопрос. StackOverflow, не так ли?

...