我们的任务是显示链接列表,然后删除每个节点,因此,如果再次调用该函数,它将不显示任何内容。列表看起来不错,但是我陷入了无限循环,不确定发生了什么。
这里是读取到该结构的文本文件(第一个数字为acctNos
,第二个数字为Balance
)
98 45.70
72 15.0
12 0.0
56 43.26
83 123.0
28 931.96
123 12.38
struct familyFinance{
int acctNos;
float Balance;
struct familyFinance* nextNodePointer;
};
void spitThemOut(struct familyFinance* &ptrHead)
{
familyFinance* tempPtr;
familyFinance* tempPtr2;
tempPtr = ptrHead;
tempPtr2 = ptrHead;
while(tempPtr != nullptr)
{
cout<<"Acct, Balance: "<<temptPtr->acctNos<<" "<<tempPtr->Balance<<endl;
tempPtr = tempPtr->nextNodePointer;
delete tempPtr2;
tempPtr2=nullptr;
}
ptrHead = nullptr;
}
答案 0 :(得分:1)
指针不像是好事。更多并不一定更好。
在您的代码中,tempPtr2
是毫无意义的。如果要在打印列表时消除列表,只需将ptrHead
沿列表向下走,在前进tempPtr
之前捕获到ptrHead
,然后在下一次迭代之前将其删除。这也消除了对ptrHead = nullptr;
结果如下:
void spitThemOut(struct familyFinance* &ptrHead)
{
while (ptrHead != nullptr)
{
cout << "Acct, Balance: " << ptrHead ->acctNos << " " << ptrHead ->Balance << endl;
familyFinance *tempPtr = ptrHead;
ptrHead = ptrHead->nextNodePointer;
delete tempPtr;
}
}