Программа C ++ с двойной связью

Я уже несколько месяцев пытаюсь научить себя программированию.Мы купили около трех книг и посмотрели тонну видео на YouTube, и это здорово. Но на прошлой неделе или около того яВы оказались в тупике благодаря связанным спискам! Я понимаю всю концепцию, но синтаксис убивает меня! Я'Вы написали несколько очень простых списков программ для упражнений, но теперь яя пытаюсь написать программу, в которой я загружаю некоторую информацию из файла (информацию о людях, подавших заявку на визу) в связанный список, а затем просто отображаю всю партию снова (как только это будет сделано, я планирую расширить ее до Я только отображаю определенные узлы и удаляю определенные узлы, но я не буду вдаваться в подробности). Надеемся, что приведенный ниже код не слишком длинный, и если бы я мог просто получить несколько указателей (без каламбура) или несколько фрагментов, чтобы помочь мне понять этот материал, который был бы потрясающим!

ps часть этого кода взята из аналогичного примера в книге.

Вот основной (большая часть) с циклом для загрузки информации (это не 'т работа)

 List myList;
 visa_application *visa;

 Node * pNode;

 string visa_type;//these are all the variables that i want to load from the file
 int invoice_no;
 string surname;
 string firstname;
 double contact;
 string status;
 string result; 

ifstream in;
in.open("applications.txt",ios::in);



      while (!in.eof()){     
         pNode = new Node;
         visa = new visa_application;    //allocate memory for nodes

         in >> visa-> visa_type >> visa->invoice_no >>  visa-> surname;
         in >> visa-> firstname >> visa-> contact >> visa-> status >>  visa-> result ; 

         pNode->nData = &visa;   //put some data in the node
         myList.appendNode(pNode); //add node to list

         }

Вот мой файл заголовка узла класса

 class Node
{
      friend class List;
      private:
              node_data * nData;
              Node *pNext;
              Node *pPrev;
      public:
              Node  (node_data * data){nData = data;
                                    pNext = NULL;
                                   pPrev = NULL;}
             node_data * getData(){return nData;}
};

вот файл заголовка списка классов

class List
{
    private:
        Node *pHead;
        Node *pTail;
        Node  *createNode(node_data * data);
    public:
        List ();
        ~List();
        Node  *getpHead (){ return pHead;}
        Node  *getpTail (){return pTail;}
        Node  *previousNode(Node  *pNode){return pNode->pPrev;}
        Node  *nextNode (Node  *pNode){return pNode->pNext;}
        void appendNode(node_data * value);
        void insertNode(node_data * value, Node  *pAfter);
        void removeNode(Node  *pNode);
        bool isEmpty();
        void printList(); 
};

List ::List() {
    pHead=NULL;
    pTail=NULL;
}

List ::~List(){
    while (!isEmpty())   //keep on removing until the
                               //head points to NULL
        removeNode(pHead);
    cout < "List deleted\n";
}

   Node * List::createNode(node_data * data){
   Node * pNode = new Node (data); //allocate memory for new node and
                                 //intialize value to data
   return pNode;  
}

   bool List ::isEmpty(){
   return pHead == NULL;
}

void List ::appendNode(node_data * value)
{
   Node * pNode = createNode(value);

   if (isEmpty()) {     //if list is empty
        pHead = pNode;        //make head point to pNode
        pNode->pPrev = NULL;
   }
   else {                    //otherwise
        pTail->pNext = pNode;  //make tail point to pNode
        pNode->pPrev = pTail;
   }
   pTail = pNode;        //tail is now pNode
   pNode->pNext = NULL;  //pNode next now points to NULL
}


void List ::insertNode(node_data * value, Node  *pAfter)
{
   Node *pNode =  createNode(value);
   pNode->pNext = pAfter->pNext;
   pNode->pPrev = pAfter;

   if (pAfter->pNext != NULL)
        pAfter->pNext->pPrev = pNode;
   else
        pTail = pNode;
   pAfter->pNext = pNode;
}

void List ::removeNode(Node  *pNode)
{
   if (pNode->pPrev == NULL)  //if removing the head
        pHead = pNode->pNext;

   else
        pNode->pPrev->pNext = pNode->pNext;  //if removing a middle node

   if (pNode->pNext == NULL)  //if removing the tail
        pTail = pNode->pPrev;

   else
        pNode->pNext->pPrev = pNode->pPrev;
   pNode = NULL;
   delete pNode;  //*free the memory
}

void List ::printList()
{
   Node  *pNode=pHead;
   if (isEmpty())
        cout < "The list is empty\n";
   else
        for (pNode = pHead; pNode != NULL; pNode = pNode->pNext)
            pNode->nData->print();
}

Ответы на вопрос(6)

Ваш ответ на вопрос