[英]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.