[英]how to allocate memory int pointer array inside a function and delete the allocated memory in 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.