gpt4 book ai didi

c++ - deleteNode 函数出现中断连接列表

转载 作者:太空宇宙 更新时间:2023-11-04 12:31:12 25 4
gpt4 key购买 nike

我正在尝试构建一个模拟服务中心的客户列表类。我的 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 指针应指向被删除节点之后的节点。相反,当我显示链表中的节点时,头部之后的任何节点似乎都指向垃圾数据。

最佳答案

@Richard Chambers 的回答是正确的。您需要设置“previous_node”的“next_node”而不是“previous_node”。
如果(节点指针)
{
previous_node->next_node = node_ptr->next_node;
删除节点指针;
}

关于c++ - deleteNode 函数出现中断连接列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58613027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com