deleteNode函数出现以中断连接列表
deleteNode function appears to break connection list
我正在尝试构建一个模拟服务中心的客户列表类。我的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;
}
相关文章:
- 当套接字连接断开时检测C/C++Unix
- 无法在windows上使用mingw将sqlite3与c连接
- 到连接组件算法的问题(递归)
- QTcpSocket在不阻塞GUI的情况下重新连接到服务器
- 无法在C++中建立与MySQL数据库的连接
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 连接 dockerized 模型和 dockerized 数据库时出现"无法 SQLConnect"错误
- 类成员和中断
- 使用 bfs 解决连接组件问题时得到错误的答案
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 如何修复valgrind启动时的致命错误(与libc6-dbg和libc6-dbg:i386连接)
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- 捕获标准输出以压缩并使用 CTRL-C 中断会给出损坏的 zip 文件
- OSX蓝牙打开RFCOMMChannelAsync声称已连接,但未建立连接,并且从未调用过委托
- 在 libcurl 连接池中预创建连接
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- libcurl 和 DNS ttl 中的内部连接管理
- deleteNode函数出现以中断连接列表
- 未连接调试器运行时程序中断