C++ 链表和指针 #包括“PersonList.h” #包括 #包括 使用名称空间std; PersonList::PersonList() { head=NULL;//head是PersonRec* } 结构PersonRec { 字符串aName; 内阿布里贝; PersonRec*链接; }; void PersonList::AddToList() { //字符串a; //int b; PersonRec*p; PersonRec**currPtr=&head; p=新员工; cout>p->aName; cout>p->aBribe; if(head==NULL) { cout

C++ 链表和指针 #包括“PersonList.h” #包括 #包括 使用名称空间std; PersonList::PersonList() { head=NULL;//head是PersonRec* } 结构PersonRec { 字符串aName; 内阿布里贝; PersonRec*链接; }; void PersonList::AddToList() { //字符串a; //int b; PersonRec*p; PersonRec**currPtr=&head; p=新员工; cout>p->aName; cout>p->aBribe; if(head==NULL) { cout,c++,pointers,linked-list,C++,Pointers,Linked List,您正在接近,但代码实际上并没有将新的第二项添加到列表中。问题是它到达了列表的末尾和最终分配: #include "PersonList.h" #include <iostream> #include <string> using namespace std; PersonList::PersonList() { head = NULL; //Head is a PersonRec* } struct PersonRec { string aName;

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

#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;
             }
         }
    }
}
只需将新列表元素的地址分配给局部变量currPtr(这不会导致它被添加到列表中)。下面是一些让它工作的建议(这似乎是家庭作业,所以我不想只给出代码):

  • 创建对象后将
    p->link
    初始化为NULL。似乎没有构造函数可以初始化它(在这种情况下,struct和class的混合似乎有点奇怪)
  • currPtr
    的声明中删除一级间接寻址(单星号)
  • 在将下一个(链接)地址分配给currPtr之前,请在while循环中检查该地址是否为null。分配该地址后,您将不再具有需要更新的节点的地址
对于列表中的下一个元素,使用名称“下一步”而不是“链接”是典型的(惯例?)。使代码更具可读性和明显性。这并不能解决您的问题,但值得一提。@Mark Wilkins已经指导您解决实际问题。
currPtr=&p;