deleteNode函数出现以中断连接列表

deleteNode function appears to break connection list

本文关键字:中断 连接 列表 函数 deleteNode      更新时间:2023-10-16

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

我试过绘制链接列表的图表并手动跟踪程序,但从纸面上看,它对我来说似乎是正确的。问题似乎在其他语句中,但我无法确定在哪里。

#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">
if (node_ptr) { previous_node->next_node = node_ptr->next_node; delete node_ptr; }