При удалении последнего узла в связанном списке я назначаю временную переменную для нуля, но он все еще там и не удален. Ява - PullRequest
1 голос
/ 01 октября 2019

При удалении последнего узла в связанном списке я назначаю временное значение null, но оно все еще там и не удаляется. (Java)

public void deleteFromBack() {

        if (!isEmpty()) {
            Node temp = first;
            while (temp.next != null) {
                temp = temp.next;
            }
            temp=null;

        }
    } 
Output:
5
9
6
7
After deleting last node: 
5
9
6
7

Ответы [ 3 ]

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

Вы не удаляете узел во фрагменте, который вы написали в OP. Вы просто назначаете null для темп.

    if (!isEmpty()) {
        Node temp = first;
        Node previousNode = null;
        while (temp.next != null) {
            previousNode = temp;
            temp = temp.next;
        }
        previousNode.next = null;
    }

Чтобы удалить узел из списка, необходимо сделать значение узла, содержащего ссылку на последний узел, нулевым.

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

Причина в том, что temp переменная - это просто еще одна ссылочная переменная, которая указывает на последний узел связанного списка вместе со вторым последним узлом.

Например: -

SecondLastNode.next---\
                       \
                        ------>LastNodeOflinkedList  
                       /
temp------------------/

В вашем сценарии вы присваиваете null только temp, в то время как SecondLastNode.next все еще указывает на последний узел.

Разрешение: -

Назначение null на SecondLastNode.next

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

То, что вы устанавливаете в null, является temp, который является локальной переменной;как только блок, в котором он объявлен, остается, он выходит из области видимости, поэтому установка его на null не имеет никакого эффекта.

То, что вы хотите сделать, это установить для элемента next этого узла значение nullТаким образом, хвост обрезается.

temp.next = null;

Однако, поскольку вы зацикливаетесь, пока не найдете узел с next, уже установленным на null, вам придется запомнить его до этого. Также вам понадобится специальный случай для последнего элемента в списке.

...