我们的任务是显示链表,然后删除每个节点,这样如果再次调用该函数,它就不会显示任何内容。该列表读得很好,但我陷入无限循环,我不知道发生了什么。
这是读入结构的文本文件(第一个数字是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;
}
指针不是好事;更多不一定更好。
在你的代码中,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;
}
}