deleteNode函数似乎会中断连接列表

时间:2019-10-29 17:57:03

标签: c++ linked-list

我正在尝试构建一个模拟服务中心的客户列表类。我的deleteNode函数将只正确删除列表的标题,而不会破坏链接。

我尝试绘制链表的图表并手动跟踪程序,但在纸上看来,这对我来说是正确的。问题似乎在else语句中的某个地方,但是我无法查明位置。

#include <string>
using namespace std;

class CustomerList
{
private:

    // structure to represent customer as a node
    struct CustomerNode
    {
        unsigned int sequence_number{};
        string name{}, service_required{};
        int month{}, day{}, year{}, hour{}, minute{};
        struct CustomerNode* next_node{ nullptr };
    };

    // Pointers to first and last node in the linked list
    CustomerNode* head;
    CustomerNode* last_node;

public:


    CustomerList();

    // Class member functions
    void insertNode(string, string, int, int, int, int, int);
    void deleteNode(string);
    void serveCustomer();
    void listAll();

    ~CustomerList();


};
void CustomerList::deleteNode(string name)
{
    CustomerNode* node_ptr;
    CustomerNode* previous_node;

    if (!head)
    {
        cout << "The list is empty." << endl;
        return;
    }

    if (head->name == name)
    {
        node_ptr = head->next_node;
        delete head;
        head = node_ptr;
    }

    else
    {
        node_ptr = head;

        while (node_ptr != nullptr && node_ptr->name != name)
        {
            previous_node = node_ptr;
            node_ptr = node_ptr->next_node;

        }


        if (node_ptr)
        {
            previous_node = node_ptr->next_node;
            delete node_ptr;
        }       

    }
}

如果我有多个节点,并删除一个节点,则仅应删除该节点。结构中的next_node指针应指向被删除节点之后的节点。相反,当我在链接列表中显示节点时,头部出现后的任何节点都指向垃圾数据。

1 个答案:

答案 0 :(得分:0)

@Richard Chambers的回答是正确的。您需要设置“ previous_node”的“ next_node”而不是“ previous_node”。
    if (node_ptr) { previous_node->next_node = node_ptr->next_node; delete node_ptr; }