当我尝试在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,显然不会打印任何内容。