Добавление нового значения в связанный список - PullRequest
0 голосов
/ 31 мая 2019

Я пытаюсь реализовать функцию в связанном списке, который добавит новую заметку. Этот новый узел является суммой предыдущего и следующего узла.

Вот мой код, но я не знаю, где ошибка.

void change(Node *head){

    Node *p = head;
    Node *temp = new Node;
    temp->next = NULL;

    while(p != NULL){
        temp->data = p->data + p->next->data;
        temp->next = p->next;
        p->next = temp;
        p = p->next;
    }   
}

Ответы [ 2 ]

2 голосов
/ 31 мая 2019

Если head равно нулю, то эта функция выделяет новый Node, но ничто не указывает на новый узел, поэтому он будет просочиться.

Если head не равно нулю, ноявляется последним (то есть единственным) узлом списка, тогда p->next->data косвенно обращается через нулевой указатель, и поведение программы не определено.

В противном случае, на первой итерации, p->next = temp; p = p->next; делает p будет таким же, как temp, и во второй итерации p->next = temp; заставляет узел указывать на себя, и цикл никогда не завершится.

0 голосов
/ 31 мая 2019

Если я правильно понял проблему после просмотра кода, внесенные изменения не сохраняются после вызова функции.

void change(Node *head ){

до

void change(Node *& head ){

Пожалуйста, попробуйте это.Редактировать:-

В коде есть другие проблемы, на которые указывают другие, такие как1. Разыменование нулевого указателя2. Неверный доступ к памяти.

...