gpt4 book ai didi

c++ - 链表和指针

转载 作者:行者123 更新时间:2023-11-30 04:18:54 26 4
gpt4 key购买 nike

#include "PersonList.h"
#include <iostream>
#include <string>
using namespace std;

PersonList::PersonList()
{
head = NULL; //Head is a PersonRec*
}

struct PersonRec
{
string aName;
int aBribe;
PersonRec* link;
};

void PersonList::AddToList()
{
//string a;
//int b;
PersonRec* p;
PersonRec **currPtr = &head;
p = new PersonRec;
cout << "\nEnter the person's name: ";
cin >> p->aName;
cout<< "\nEnter the person's contribution: ";
cin >> p->aBribe;

if (head == NULL)
{
cout<<1<<endl;
head=p;
}
else if(head!=NULL)
{
bool x = true;
while (x != false)
{
*currPtr = (*currPtr)->link;
if (currPtr == NULL)
{
currPtr = &p;
x = false;
}
}
}
}

这应该是一个链表,用户在其中输入姓名和贿赂金额,然后将其添加到列表中,贿赂金额最高的放在最前面。

在这个特定阶段,我只是想弄清楚如何多次将人员输入列表,而不考虑贿赂。由于包含我不太擅长的指针,我在这里遇到了麻烦。

成功输入列表中的第一个节点后,程序在我输入第二个节点后卡住,因此我在“else if(head!=NULL)”处的代码存在缺陷。我不确定这是语法问题还是我根本没有完全理解这个概念。

此外,我不允许使用返回到前一个节点的链接作为 PersonRec 结构的一部分,这可能对我有帮助。

我该如何解决这个问题?

最佳答案

您接近了,但代码实际上并没有将新的第二项添加到列表中。它的一个问题是它到达了列表的末尾和最终的赋值:

currPtr=&p;

只是将新列表元素的地址分配给局部变量 currPtr(这不会导致它被添加到列表中)。以下是一些让它工作的建议(这看起来像是家庭作业,所以我不想只给出代码):

  • 创建对象后将p->link 初始化为NULL。似乎没有构造函数来初始化它(在这种情况下,结构和类的混合似乎有点奇怪)。
  • currPtr 的声明中删除一级间接(单个星号)。
  • 在将下一个(链接)地址分配给 currPtr 之前的 while 循环中,检查它是否为空。一旦分配,您就不再拥有需要更新的节点地址。

关于c++ - 链表和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16114480/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com