您好我是初学者学习c ++ 我正在尝试使用递归函数创建链接列表 我虽然有或多或少的指针,链表,数据结构等,但我被困了2天。
这是我的整个代码。
我基本上想要做的就像我说只使用递归函数创建一个链表。 问题是我的指针变量' head'总是指向NULL,我无法弄清楚为什么,我想我误解了很多东西,但我根本不知道是什么......而且我尝试的更多,我感到困惑。
这一定是一个很新手的问题,但如果有人可以帮助我,我真的很感激。
#include <iostream>
using namespace std;
struct linkedlist
{
int value;
linkedlist *next;
};
void insertNode(linkedlist* temp)
{
if (temp->next != NULL)
{
insertNode(temp->next);
}
else
{
temp->next = new linkedlist;
temp->next->value = 0;
temp->next->next = NULL;
}
}
linkedlist *addNode(linkedlist *temp)
{
if (temp == NULL)
{
linkedlist *newelement = new linkedlist;
newelement->value = 0;
newelement->next = NULL;
temp = newelement;
return newelement;
}
else
{
insertNode(temp);
}
}
void displaylist(linkedlist *temp)
{
while (temp != NULL)
{
cout << temp->value << endl;
temp = temp->next;
}
}
int main()
{
linkedlist *head = NULL;
linkedlist *element1 = addNode(head);
linkedlist *element2 = addNode(head);
linkedlist *element3 = addNode(head);
linkedlist *element4 = addNode(head);
linkedlist *element5 = addNode(head);
cin.ignore();
cin.get();
}
答案 0 :(得分:3)
您正在尝试修改传递给addNode
的指针,但指针是按值传递的,因此您不会在调用站点看到修改。
要解决此问题,请通过引用接收指针:
linkedlist *addNode(linkedlist*& temp)
答案 1 :(得分:1)
您的代码没有多大意义。例如,函数addNode
应该具有添加到列表中的值的参数。此外,不需要有两个函数addNode
和insertNode
,因为它们执行相同的操作(至少在函数的实现中)。如果你想要一些函数insertNode
,那么它应该有不同的语义。
这是一个演示程序,显示如何编写函数addNode
。您可以将其用作程序的模板。在这个演示程序中,函数displayList
也是递归的。当然,您还需要编写将删除所有节点的功能。它也可以是递归的。
#include <iostream>
struct linkedlist
{
int value;
linkedlist *next;
};
linkedlist * addNode( linkedlist *head, int value )
{
return head == nullptr
? ( new linkedlist { value, nullptr } )
: ( head->next = addNode( head->next, value ), head );
}
void displayList( linkedlist *head )
{
if ( head == nullptr )
{
std::cout << std::endl;
}
else
{
std::cout << head->value << ' ';
displayList( head->next );
}
}
int main()
{
linkedlist *head = nullptr;
for ( int x : { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } ) head = addNode( head, x );
displayList( head );
}
程序输出
0 1 2 3 4 5 6 7 8 9