簡體   English   中英

如何將頭部指針傳遞給 main.cpp 中的函數

[英]How to pass the pointer of a head to a function in main.cpp

當我嘗試在 main 中調用 DisplayLinkedList 函數時,它什么也沒打印出來。 我如何正確地將頭部傳遞給 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);
}

我認為您在這里有一個設計問題(除了 Jabberwocky 指出的問題)。 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 ;)

這里至少有一個問題:

     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必須在循環內。

我可以看到的另一個問題是head實際上從未更新過。 它被初始化為NULL一次。 因此,當您調用DisplayLinkedList(head) , head 為 NULL 並且顯然不會打印任何內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM