#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结构的一部分,这可能对我有帮助。
如何解决此问题?
答案 0 :(得分:2)
您已接近,但代码实际上并未将新的第二项添加到列表中。它的一个问题是它到达列表的末尾和最终的赋值:
currPtr=&p;
只需将新列表元素的地址分配给局部变量currPtr(不会导致它被添加到列表中)。以下是一些建议让它工作(这似乎是功课,所以我不想只是给代码):
p->link
初始化为NULL。似乎没有一个构造函数会初始化它(在这种情况下,struct和class的混合看起来有点奇怪)。currPtr
的声明中删除一级间接(单个星号)。