Удаление последнего узла односвязного списка - PullRequest
0 голосов
/ 14 января 2019

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

public Node deleteLastNode(Node node)
{
    if (node.next == null || node == null)
        return null;
    Node temp = node;

    while (temp.next.next != null)
    {
        temp = temp.next;
    }
    temp.next = null;
    return node;
}

Ответы [ 4 ]

0 голосов
/ 14 января 2019

Чтобы перейти по связанному списку к его последнему узлу, вам нужен указатель (курсор), указывающий на узел, который, как вы предполагаете, был последним в ожидании теста this.next == null.

Без временного узла (a.k.a курсор или указатель) как вы могли бы взаимодействовать с любым узлом в списке?

0 голосов
/ 14 января 2019

Прежде всего вам нужно переключить это на такие условия

if (node.next == null || node == null) to 
if (node == null || node.next == null) 

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

0 голосов
/ 14 января 2019

Я не понимаю, почему мы создаем временный узел?

Это потому, что вы храните текущий узел итерации в этой переменной temp.

Я попытался сделать это без временного узла и использовал сам узел, но вывод не удаляет последний узел.

Код, необходимый для предоставления обратной связи.

Кроме того, поскольку мы используем временный узел, почему мы возвращаем узел, а не временный?

Поскольку вы возвращаете ссылку на заголовок списка, у него просто больше нет последнего элемента.

Мы не вносим никаких изменений в узел, так как же это влияет на узел?

Вы удаляете последний узел здесь temp.next = null;

Надеюсь, это немного прояснит для вас.

0 голосов
/ 14 января 2019

Причина, по которой обычно используется узел temp, заключается в том, что node является заголовком / началом списка, который является единственным представлением списка, который у нас есть (по определению связанного списка). Следовательно, мы не хотим изменять заголовок (или представление нашего списка), и по этой причине node возвращается из метода - это означает, что мы возвращаем обновленный список после удаления.

...