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(这不会导致它被添加到列表中)。下面是一些让它工作的建议(这似乎是家庭作业,所以我不想只给出代码):
- 创建对象后将
初始化为NULL。似乎没有构造函数可以初始化它(在这种情况下,struct和class的混合似乎有点奇怪)p->link
- 从
的声明中删除一级间接寻址(单星号)currPtr
- 在将下一个(链接)地址分配给currPtr之前,请在while循环中检查该地址是否为null。分配该地址后,您将不再具有需要更新的节点的地址
currPtr=&p;