Как передать указатель головы функции в main. cpp - PullRequest
0 голосов
/ 03 марта 2020

Когда я пытаюсь вызвать функцию DisplayLinkedList в main, она ничего не печатает. Как правильно передать головку в функцию DisplayLinkedList, чтобы она правильно распечатывала весь связанный список?

void LinkedList::AppendInTheEnd(int numberToAdd)
{
     NodePtr newNode = new Node;
     newNode->nextNode = NULL;
     newNode->data = numberToAdd;

     if(headNode != NULL)
     {
        currentNode = headNode;
        while(currentNode->nextNode != NULL)
        {
            currentNode = currentNode->nextNode;
        }
        currentNode->nextNode = newNode;
     }
     else
     {
         headNode = newNode;
     }
}
void LinkedList::DisplayLinkedList(Node* head)
{

         Node* p;
         p = head;
         cout << "Displaying the list" << p << endl;
         while(p != NULL)
         {
              cout << "Node at " << p << endl;
              cout << " value " << p->data << endl;
              cout << " next: " << p->data << endl;
           }
            p = p->nextNode;
}
int main()
{
   LinkedList::Node* head = NULL;


  LinkedList list;

  list.AppendInTheEnd(9);
  list.AppendInTheEnd(10);

  list.DisplayLinkedList(head);
}

Ответы [ 2 ]

2 голосов
/ 03 марта 2020

Я думаю, у вас есть проблема с дизайном (в дополнение к тому, на что указал Джаббервоки). LinkedList::DisplayLinkedList является функцией-членом, и название подразумевает, что она печатает содержимое списка. Например,

list.DisplayLinkedList();

будет означать, что он печатает содержимое list.

Тогда почему он принимает какой-либо параметр? Это функция-член, что означает, что она вызывается для экземпляра LinkedList, и вы можете получить доступ к членам этого экземпляра, используя this->. Передача какого-либо параметра для печати любого другого списка, кроме текущего, просто не имеет большого смысла. Я предлагаю следующий подход:

void LinkedList::DisplayLinkedList()
{
     Node *p = this->headNode;
     cout << "Displaying the list" << p << endl;
     while(p != NULL)
     {
         cout << "Node at " << p << "\n"; // prints the address
         cout << " value " << p->data << "\n";
         cout << " next: " << p->data << "\n"; // p->nextNode maybe?

         p = p->nextNode;
     }
}

Для хорошей практики не спам endl;)

1 голос
/ 03 марта 2020

Здесь есть, по крайней мере, проблема:

     while(p != NULL)
     {
          cout << "Node at " << p << endl;
          cout << " value " << p->data << endl;
          cout << " next: " << p->data << endl;
          p = p->nextNode;   // <------------------+
     }                                             |
                                                   |
     // p = p->nextNode;   // this should be here -|

p = p->nextNode должно быть внутри l oop.

Другая проблема, которую я вижу, состоит в том, что head на самом деле никогда не обновляется. Инициализируется один раз до NULL. Поэтому, когда вы звоните DisplayLinkedList(head), head равен NULL и, очевидно, ничего не будет напечатано.

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