显示然后删除链接列表C ++ [关闭]

问题描述 投票:-3回答:1

我们的任务是显示链表,然后删除每个节点,这样如果再次调用该函数,它就不会显示任何内容。该列表读得很好,但我陷入无限循环,我不知道发生了什么。

这是读入结构的文本文件(第一个数字是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;
}
c++ linked-list
1个回答
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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.