0
#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;
            }

        }
    }

}

这是一个程序,应该通过动态内存分配将姓名和贿赂输入到链表中,并根据请求输出结果(我只将输入函数放在这里,因为它是唯一有问题的函数)。第一个元素输入和输出正常,但如果我尝试输入第二个元素,则不会输出。程序可以编译,但是由于在第一个节点之后添加节点的所有节点都不同,所以问题一定出在我评论为问题的部分。任何帮助,将不胜感激。这是家庭作业,是的,所以任何提示将不胜感激。

4

1 回答 1

0

由于这是你的作业,我不会给你代码,而是引导你找到解决方案:)

问题是您将局部变量设置currPtr为指向新添加的元素,而不是设置link最后一条记录的指向它。

我相信以下内容可能会让您感到困惑:

a = 7;
b = a;
b = 6;

在这里, 的值a没有改变,不管我们在第二个语句中复制了它的值b

类似地,在以下语句序列中

currPtr = currPtr->link;
currPtr = p;

无论 currPtr 和 link 是指针,currPtr->link 的值都没有改变,因为您正在更改它们的,而不是它们指向的字段。

于 2013-04-20T21:55:29.267 回答