Присоединение к двусвязному списку и отображение - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть два класса Person и Node.Вот что у меня есть:

(Обратите внимание, что все в одном файле cpp, я просто разделяю его для лучшего просмотра.)

Заголовочные файлы

#include <cstdio>
#include <iostream>
using namespace std;

Персональный класс

class Person
{
    int age;
    string name;

    void setage(int age)
    {
        this->age = age;
    }

    void setname(string name)
    {
        this->name = name;
    }

    int getage()
    {
        return this->age;
    }


    string getname()
    {
        return this->name;
    }
};

Узловой класс


class Node
{

public:
    Node * Next;
    Node * Prev;
    Person * Data;

    Node * Head;
    Node * Tail;


    Node()
    {
        Node * Head = NULL, *Tail = NULL;
    }


    void AppendNode(Node * pNode)
    {

        if (Head == NULL)
        {               //if list is empty
            Head = pNode;       //make head point to pNode
            pNode->Prev = NULL;
        }

        else
        {
            Tail->Next = pNode; //make tail point to pNode
            pNode->Prev = Tail;
        }

        Tail = pNode;       //tail is now pNode
        pNode->Next = NULL;     //pNode next now points to NULL
    }


    void display(Node * pNode)
    {
        for (pNode = Head; pNode != NULL; pNode = pNode->Next)
            cout << pNode->Data << endl;
    }
};

Основной

int main()
{
    Node * pNode;
    //Add items to linked list
    for (int i = 0; i < 10; i++)
    {
        pNode = new Node(); //allocate                                                    
        pNode->Data->setage(i);
        pNode->AppendNode(pNode);
    }
    pNode->display(pNode);

    /* for(pNode = pHead; pNode != NULL; pNode = pNode->pNext)
            cout<<pNode->nData<<endl; 
     */

    return 0;
}

Я думаю, что я делаю это неправильно, но это то, что у меня есть.Я добавляю данные в список.Вы можете увидеть код здесь в онлайн-компиляторе https://onlinegdb.com/Hk87R0UvS

вопрос в том, что я не могу добавить в список

1 Ответ

2 голосов
/ 24 сентября 2019

Посмотрите на ваши определения Head и Tail.На самом деле в вашем коде есть несколько из них.

Во-первых, вы определяете как Head, так и Tail как (нестатические) члены.Это означает, что эти члены не являются общими для узлов, и ваш список имеет несколько голов и несколько хвостов (что бы это ни значило).Затем вы переопределяете эти переменные внутри конструктора.Вы дефилируете временные переменные и устанавливаете их в NULL, чтобы немедленно их уничтожить.

Итак, внесите несколько изменений.Сначала сделайте статичные элементы Head и Tail, чтобы делить их между узлами в списке (кстати, это означает, что вы планируете иметь только один список в своей программе).Удаление временных переменных из конструктора не требуется, но прояснит ваше намерение.

Еще одна вещь: вы никогда не создаете Person, но пытаетесь разыменовать указатель.

...