首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在链表c++中添加结构的递归

在链表c++中添加结构的递归
EN

Stack Overflow用户
提问于 2012-07-14 09:27:10
回答 3查看 236关注 0票数 1

我在按数字顺序将结构插入链表时遇到了问题。每个结构都有一个"number“,如下面的代码所示。我正在尝试让具有最小数字的结构成为列表的头部(即:成为“people”指向的结构)。我已经断断续续地盯着这段代码一整天了,我不知道它到底出了什么问题。任何帮助都是非常感谢的。谢谢

代码语言:javascript
复制
Person *addPerson(Person *people, Person *addition, int &numList)
{
if (people == NULL && numList == 0)
{
    people = addition;
    numList++;
    return people;
}
if (people->number >= addition->number)
{
    addition->nextPerson = people;
    people = addition;
    return people;
}
else if (people->number < addition->number && people->nextPerson != NULL)
{
    addPerson(people->nextPerson, addition, numList);
}
else if (people->number < addition->number && people->nextPerson == NULL)
{
    people->nextPerson = addition;
    numList++;
    return people;
}
}

编辑**

代码语言:javascript
复制
int main()
{
Person *blake = new Person;
Person *kyra = new Person;
Person *elon = new Person;
Person *bill = new Person;
Person *people = NULL;

blake->number = 1;
blake->name = "blake";
blake->lastName = "madden";
blake->nextPerson = NULL;

kyra->number = 2;
kyra->name = "kyra";
kyra->lastName = "madden";
kyra->nextPerson = NULL;

elon->number = 3;
elon->name = "elon";
elon->lastName = "musk";
elon->nextPerson = NULL;

bill->number = 4;
bill->name = "bill";
bill->lastName = "gates";
bill->nextPerson = NULL;

int num = 0;
int &numList = num;

people = addPerson(people, blake, numList);

people = addPerson(people, kyra, numList);
people = addPerson(people, elon, numList);
people = addPerson(people, bill, numList);

cout << people->name << '\n' << people->lastName;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-14 09:33:09

您没有在第三个if块中使用来自addPerson()的返回值。尝试:

代码语言:javascript
复制
people->nextPerson = addPerson(people->nextPerson, addition, numList);
return people;

你还需要其中的return people;,否则你会在函数的末尾运行,并且不会返回任何有意义的东西(我的编译器警告我,你应该改变你的警告设置,这样你的警告设置也应该改变)。

通过上述更改,您的代码似乎可以正确运行。

票数 2
EN

Stack Overflow用户

发布于 2012-07-14 09:35:26

您永远不会分配返回的head。它应该是

代码语言:javascript
复制
people->nextPerson = addPerson(people->nextPerson, addition, numList);
票数 1
EN

Stack Overflow用户

发布于 2012-07-14 09:33:21

你的问题是函数的参数。您希望修改递归调用顺序中前一个调用方的节点中的指针,但您只是传递下一个节点的指针值。这并不允许您实际修改前一个节点的指针成员。

更改您的函数,使其如下所示:

代码语言:javascript
复制
void addPerson(Person** people, Person *addition, int &numList)

然后,当您在第三个块中调用addPerson时,如下所示:

代码语言:javascript
复制
addPerson(&(*(people)->nextPerson), addition, numList);

最后,当您访问people参数时,请确保-执行额外的取消引用,例如:

代码语言:javascript
复制
*people = addition;

代码语言:javascript
复制
if ((*people)->number >= addition->number)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11480264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档