C++;使用递归函数创建链表 我是初学者学习C++ 我正在尝试使用递归函数创建一个链表 我想我得到了或多或少的指针,链表,数据结构等,但我坚持了2天
这是我的全部代码 我基本上是想做的,就像我说的,只使用递归函数创建一个链表。 问题是我的指针变量“head”总是指向NULL,我不知道为什么,我想我误解了很多东西,但我不知道是什么。。。我越是尝试,我就越感到困惑 这一定是个新手问题,但如果有人能帮我,我真的很感激C++;使用递归函数创建链表 我是初学者学习C++ 我正在尝试使用递归函数创建一个链表 我想我得到了或多或少的指针,链表,数据结构等,但我坚持了2天,c++,recursion,linked-list,C++,Recursion,Linked List,这是我的全部代码 我基本上是想做的,就像我说的,只使用递归函数创建一个链表。 问题是我的指针变量“head”总是指向NULL,我不知道为什么,我想我误解了很多东西,但我不知道是什么。。。我越是尝试,我就越感到困惑 这一定是个新手问题,但如果有人能帮我,我真的很感激 #include <iostream> using namespace std; struct linkedlist { int value; linkedlist *next; }; void in
#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();
}
#包括
使用名称空间std;
结构链接列表
{
int值;
linkedlist*下一步;
};
void insertNode(linkedlist*temp)
{
如果(临时->下一步!=NULL)
{
插入节点(临时->下一步);
}
其他的
{
临时->下一步=新建链接列表;
温度->下一步->值=0;
临时->下一步->下一步=空;
}
}
linkedlist*addNode(linkedlist*temp)
{
if(temp==NULL)
{
linkedlist*newelement=新建linkedlist;
新元素->值=0;
newelement->next=NULL;
temp=新元素;
返回新元素;
}
其他的
{
插入节点(temp);
}
}
无效显示列表(linkedlist*temp)
{
while(temp!=NULL)
{
其次是价值观;
}
}
int main()
{
linkedlist*head=NULL;
linkedlist*element1=addNode(头);
linkedlist*element2=addNode(头);
linkedlist*element3=addNode(头);
linkedlist*element4=addNode(head);
linkedlist*element5=addNode(头);
cin.ignore();
cin.get();
}
您正试图修改传入到addNode
的指针,但指针是按值传递的,因此在调用站点上看不到修改
要解决此问题,请通过引用获取指针:
linkedlist *addNode(linkedlist*& temp)
您正试图修改传入到
addNode
的指针,但指针是按值传递的,因此在调用站点上看不到修改
要解决此问题,请通过引用获取指针:
linkedlist *addNode(linkedlist*& temp)
你的代码没有什么意义。例如,函数
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 );
}
你的代码没有什么意义。例如,函数
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 );
}
您得到的错误是什么?请记住,递归将对列表造成严格的大小限制。如果列表中的元素太多,则会出现StackOverflowException。考虑避免递归。你得到的错误是什么?请记住,递归会对列表造成严格的大小限制。如果列表中的元素太多,则会出现StackOverflowException。考虑避免递归。这正是我错过的,实际上我找不到任何地方…我现在是超级初学者,但我希望有一天我能像你一样编程!这对我帮助很大,非常感谢。通过引用,我最终会有一个关于这个指针的问题。它完美地解决了我的问题,我发现如果我在其他函数上再次使用这个'head'变量来打印我的列表,它会很好地工作。我的问题是这个变量怎么可能指向列表的起始元素,因为我并没有看到任何代码使它指向它。。。瞧,另一个非常新的问题(我想进入,以创造空间,它刚刚进入我的评论)我的意思是,这很酷,一切都很完美,但我想知道它是如何指向起始元素的。毕竟,我被困在这一章中,因为至少3天,实际上你不知道你帮了我多少忙!谢谢^^ ^!它指向列表的开头,因为对
addNode
的第一次调用将节点分配到head
,然后随后的调用将节点附加到该节点的末尾。这正是我所缺少的,实际上我在任何地方都找不到的。。。我现在是超级初学者,但我希望有一天我能像你一样编程!这对我帮助很大,非常感谢。通过引用,我最终会有一个关于这个指针的问题。它完美地解决了我的问题,我发现如果我在其他函数上再次使用这个'head'变量来打印我的列表,它会很好地工作。我的问题是这个变量怎么可能指向列表的起始元素,因为我并没有看到任何代码使它指向它。。。瞧,另一个非常新的问题(我想进入,以创造空间,它刚刚进入我的评论)我的意思是,这很酷,一切都在完美地工作,但我想知道它是如何指向起始元素的。毕竟,我被困在这一章中,因为至少3天,实际上你不知道你有多少