Как получить ниже связанный список с другом оператора для работы? - PullRequest
1 голос
/ 06 июня 2019

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

#include <iostream>
 using namespace std;

 struct Node {
 int data;
 Node *next;
 Node(int j) : data(j), next(nullptr) {}
 friend ostream &operator<<(ostream &os, const Node &n) {
 cout << "Node\n"
     << "\tdata: " << n.data << "\n";
    return os;
  }
 };
void addElement(Node **head, int data){
Node *temp = nullptr;
temp->data = data;
temp->next=nullptr;
Node *cur = *head;
while(cur) {
    if(cur->next == nullptr) {
        cur->next = temp;
        return;
    }
    cur = cur->next;
}
 };
 void printList(const Node *head){
 const Node *list = head;
while(list) {
    cout << list;
    list = list->next;
}
cout << endl;
cout << endl;
  };
 void deleteList(Node *head){
Node *delNode =nullptr;
while(head) {
    delNode = head;
    head = delNode->next;
    delete delNode;
}};

  int main() {
  Node *list = nullptr;
  addElement(&list, 1);
  addElement(&list, 2);
  printList(list);
   deleteList(list);
   return 0;
   }

после компиляции я не получаю ни ошибки, ни вывод. Так что я не могу понять, что идет не так, иначе моя реализация не верна!

1 Ответ

1 голос
/ 06 июня 2019

Здесь сразу ошибка

void addElement(Node **head, int data){
Node *temp = nullptr;
temp->data = data;

temp - ноль, но вы разыменовываете его. Ошибка разыменования нулевого указателя.

Полагаю, вы имели в виду это

void addElement(Node **head, int data) {
    Node *temp = new Node(data);

, который выделяет новый Node, инициализирует его с data и указывает temp на вновь выделенный Node.

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