#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;
p=new PersonRec;
p->link=NULL;
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) //The problem is in here.
{
PersonRec *currPtr=head;
bool x=true;
while(x==true)
{
currPtr=currPtr->link;
if(currPtr==NULL)
{
currPtr=p;
x=false;
}
}
}
}
这是一个程序,应该通过动态内存分配将名称和贿赂输入到链表中,并根据请求输出结果(我只在这里放置了输入函数,因为它是唯一有问题的函数) 。第一个元素输入和输出正常,但如果我尝试输入第二个元素则不输出。程序编译,但由于在第一个节点之后为所有节点添加节点是不同的,因此问题必须与我作为问题评论的部分有关。任何帮助,将不胜感激。这是作业,是的,所以任何提示都会受到赞赏。
答案 0 :(得分:0)
由于这是你的作业,我不打算给你代码,而是引导你找到解决方案:)
问题是您将局部变量currPtr
设置为指向新添加的元素,而不是将最后一条记录的link
设置为指向它。
我相信以下内容可能让您感到困惑:
a = 7;
b = a;
b = 6;
此处,a
的值没有变化,无论我们在第二个语句中将值复制到b
这一事实。
类似地,在以下语句序列中
currPtr = currPtr->link;
currPtr = p;
currPtr-&gt;链接的值没有改变,无论currPtr和link是指针的事实,因为你正在改变他们的值,而不是他们指向的字段。< / p>