链表的递归打印函数
Recursive Print Function for Linked List
所以我的教授希望我们从这个 class 'addressBookType' 派生自其他 4 个 classes 的链表设计递归函数。该程序基本上创建了一个地址簿,其中包含人员的姓名、地址、日期和关系,每个都有自己的 classes。
她想做的递归函数是打印、追加、删除和顺序搜索。
但是问题来了。函数递归的主要前提是它应该在函数定义中调用自身,对吧?我成功地创建了递归附加函数,但我在使用递归打印函数时遇到了问题。
原始打印函数和递归打印函数如下:
void addressBookType::displayList() const
{
ListNode *nodePtr; // To move through list
nodePtr = head; // start at the head of list
while(nodePtr != NULL) // while nodePtr points to a node, move through list
{
displayListRecursive(nodePtr);
nodePtr = nodePtr->next;
}
}
void addressBookType::displayListRecursive(ListNode *node) const
{
if(node != NULL)
{
(node->value).print();
displayListRecursive(node->next);
}
}
我遇到的问题是,当我 运行 程序时,所有内容都打印出来,然后它开始打印第二个对象,直到只剩下一个对象。这是我打印时的意思:
1
2
3
4
2
3
4
3
4
4
我会粘贴实际输出的内容,但它非常冗长,因为每个对象都会显示此人的名字、姓氏、地址、街道、邮政编码、城市、州、日期和关系类型。
每当我在 displayListRecursive 函数中取出 displayListRecursive(node->next)
时,一切都会正常打印。但它并不是真正的递归函数,对吧?或者是吗?任何人都有一些答案可以解释这一点? (我真的是递归新手)
我认为递归定义很好。它将打印您提供的节点,然后用下一个节点调用自己,直到它 NULL
.
所以你只需要从第一个节点调用递归函数。
问题是您在 displayList
的 while 循环中使用所有节点多次调用它。
我认为,如果您只是删除 while 循环,它应该会按预期工作。
像这样:
void addressBookType::displayList() const
{
displayListRecursive(head);
}
void addressBookType::displayListRecursive(ListNode *node) const
{
if(node != NULL)
{
(node->value).print();
displayListRecursive(node->next);
}
}
所以我的教授希望我们从这个 class 'addressBookType' 派生自其他 4 个 classes 的链表设计递归函数。该程序基本上创建了一个地址簿,其中包含人员的姓名、地址、日期和关系,每个都有自己的 classes。
她想做的递归函数是打印、追加、删除和顺序搜索。
但是问题来了。函数递归的主要前提是它应该在函数定义中调用自身,对吧?我成功地创建了递归附加函数,但我在使用递归打印函数时遇到了问题。
原始打印函数和递归打印函数如下:
void addressBookType::displayList() const
{
ListNode *nodePtr; // To move through list
nodePtr = head; // start at the head of list
while(nodePtr != NULL) // while nodePtr points to a node, move through list
{
displayListRecursive(nodePtr);
nodePtr = nodePtr->next;
}
}
void addressBookType::displayListRecursive(ListNode *node) const
{
if(node != NULL)
{
(node->value).print();
displayListRecursive(node->next);
}
}
我遇到的问题是,当我 运行 程序时,所有内容都打印出来,然后它开始打印第二个对象,直到只剩下一个对象。这是我打印时的意思:
1
2
3
4
2
3
4
3
4
4
我会粘贴实际输出的内容,但它非常冗长,因为每个对象都会显示此人的名字、姓氏、地址、街道、邮政编码、城市、州、日期和关系类型。
每当我在 displayListRecursive 函数中取出 displayListRecursive(node->next)
时,一切都会正常打印。但它并不是真正的递归函数,对吧?或者是吗?任何人都有一些答案可以解释这一点? (我真的是递归新手)
我认为递归定义很好。它将打印您提供的节点,然后用下一个节点调用自己,直到它 NULL
.
所以你只需要从第一个节点调用递归函数。
问题是您在 displayList
的 while 循环中使用所有节点多次调用它。
我认为,如果您只是删除 while 循环,它应该会按预期工作。
像这样:
void addressBookType::displayList() const
{
displayListRecursive(head);
}
void addressBookType::displayListRecursive(ListNode *node) const
{
if(node != NULL)
{
(node->value).print();
displayListRecursive(node->next);
}
}