Я не могу понять, почему мой метод добавления не будет работать - PullRequest
0 голосов
/ 24 декабря 2018

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

Я на Windows 10, использую инсайдеры VSCode.Использование G ++ в качестве моего компилятора, если это имеет значение.Я попытался просто установить указатели узлов вручную, и это работает.Я не могу понять, что отличается в методе.Идея заключается в том, что «tail - это последний узел, поэтому сделайте tail.next добавленным узлом и установите tail равным новому узлу».

#include <iostream>
using namespace std;

struct Node{
    int data;
    struct Node *next;
};
class List{
    private:
        struct Node *head;
        struct Node *tail;
    public:
        list(){
            head->next=tail;
            // I tried initializing tail.next to null but that didn't help
            tail->next=NULL;
        }
        void add(int d){
            printf("I'm entering the add\n");
            struct Node *n=new Node;

            printf("Node created\n");
            n->data=d; 
            printf("Data set %d\n", n->data); 

            // right here is the issue, it seems
            tail->next=n;
            printf("Node added\n");
            tail=n->next;
        }
};
int main(){
   List l;
   l.add(50);
   return 0;
}

Я ожидаю, что он напечатает 50 (я еще не пробовал свой метод отображения, поскольку код ломается до того, как он туда попал), но он выводит «Набор данных 50», а затем вылетает.Компилирует нормально, без предупреждений.

1 Ответ

0 голосов
/ 24 декабря 2018

Основная проблема в вашем конструкторе, его имя должно совпадать с именем класса (фактически вы используете список STL). Затем в конструкторе вы должны инициализировать голову и хвост в NULL.

Другоемелкие ошибки, которые я исправил, ниже ваш код.

#include <iostream>
using namespace std;

struct Node{
    int data;
    struct Node *next;
};
class List{
    private:
        struct Node *head;
        struct Node *tail;
    public:
        List(){
            //initialise both head and tail to NULL
            tail=NULL;
            head=NULL;
        }
        void add(int d){
            printf("I'm entering the add\n");
            struct Node *n=new Node;

            printf("Node created\n");
            n->data=d;
            printf("Data set %d\n", n->data);
            n->next=NULL;

            // I think you missed about the first time when you will add a node
            if(head==NULL)//for adding first time , we will have to check as the first will be our last one
            {
                tail=n;
                head=n;
            }
            else// for second time or more we give new node pointer address to our linked list last node next
            {
                tail->next=n;
                tail=n; // then this n becomes our last node
            }
            printf("Node added\n");

        }
};
int main(){
   List l;
   l.add(50);
   l.add(70);
   l.add(90);
   return 0;
}
...