Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ deleteNode函数显示为断开连接列表_C++_Linked List - Fatal编程技术网

C++ deleteNode函数显示为断开连接列表

C++ deleteNode函数显示为断开连接列表,c++,linked-list,C++,Linked List,我正在尝试构建一个模拟服务中心的customer list类。我的deleteNode函数只会正确删除列表的标题,而不会中断链接 我试过画链表的图表,并用手追踪程序,但在纸上,我觉得它是正确的。问题似乎在else语句中的某个地方,但我无法指出具体位置 #include <string> using namespace std; class CustomerList { private: // structure to represent customer as a nod

我正在尝试构建一个模拟服务中心的customer 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();


};
#包括
使用名称空间std;
类客户列表
{
私人:
//将客户表示为节点的结构
结构自定义节点
{
无符号整数序列{};
字符串名称{},需要服务{};
int月{}、日{}、年{}、时{}、分{};
结构CustomerNode*下一个节点{nullptr};
};
//指向链接列表中第一个和最后一个节点的指针
CustomerNode*头;
CustomerNode*最后一个节点;
公众:
客户列表();
//类成员函数
void insertNode(string,string,int,int,int,int,int);
无效删除节点(字符串);
void serveCustomer();
void listAll();
~CustomerList();
};
void CustomerList::deleteNode(字符串名称)
{
CustomerNode*node\u ptr;
CustomerNode*上一个_节点;
如果(!头)
{
cout下一个节点;
删除标题;
head=节点ptr;
}
其他的
{
节点_ptr=头部;
while(node_ptr!=nullptr&&node_ptr->name!=name)
{
上一个_节点=节点_ptr;
node_ptr=node_ptr->next_node;
}
if(节点ptr)
{
上一个\u节点=节点\u ptr->下一个\u节点;
删除节点ptr;
}       
}
}

如果我有多个节点,并删除一个节点,则只应删除该节点。结构中的下一个_节点指针应指向删除节点后的节点。相反,当我在链表中显示节点时,头部后面的任何节点都指向垃圾数据。

Richard Chambers的答案是正确的。您需要设置“上一个节点”的“下一个节点”而不是“上一个节点”。
if(节点ptr)
{
上一个\u节点->下一个\u节点=节点\u ptr->下一个\u节点;
删除节点ptr;

}

理查德·钱伯斯的答案是正确的。您需要设置“上一个节点”的“下一个节点”而不是“上一个节点”。
if(节点ptr)
{
上一个\u节点->下一个\u节点=节点\u ptr->下一个\u节点;
删除节点ptr;


} < /代码>

由于问题是垃圾数据显示在节点被删除的地方,请考虑处理固定节点指针以删除正在删除的节点的代码。是否
previous\u node=node\u ptr->next\u node做你需要它做的事?看着我
previous\u node=node\u ptr->next\u node应该是
previous\u node->next\u node=node\u ptr->next\u node我所知道的调试链表的最好方法是画图。画一张单子。然后,严格按照编码说明,画出移除的每个步骤。当你发现自己在画一些愚蠢的东西时,恭喜你!你发现了这个bug,你可能已经很清楚你需要做什么了。据我所知,在纸上,previous\u node=node\u ptr->next\u node做了我需要它做的事情。把它画出来,我没有发现它的工作方式有任何问题。但是,当我运行程序时,它显然会在删除的节点处中断,除非该节点是头节点。如果我有6个节点并删除第4个节点,则与节点5和6的连接将断开,并显示垃圾邮件数据。此外,我已经尝试过Pyviou-NoTo-> NeXPothNo.NoDEYPPT-> NExtBy节点,但是这会中断程序,并且根本不会运行。因为问题是,在删除节点时显示了垃圾数据,请考虑处理固定节点指针以删除正在删除的节点的代码。是否
previous\u node=node\u ptr->next\u node做你需要它做的事?看着我
previous\u node=node\u ptr->next\u node应该是
previous\u node->next\u node=node\u ptr->next\u node我所知道的调试链表的最好方法是画图。画一张单子。然后,严格按照编码说明,画出移除的每个步骤。当你发现自己在画一些愚蠢的东西时,恭喜你!你发现了这个bug,你可能已经很清楚你需要做什么了。据我所知,在纸上,previous\u node=node\u ptr->next\u node做了我需要它做的事情。把它画出来,我没有发现它的工作方式有任何问题。但是,当我运行程序时,它显然会在删除的节点处中断,除非该节点是头节点。如果我有6个节点并删除第4个节点,则与节点5和6的连接将断开,并显示垃圾邮件数据。此外,我还尝试了previous_node->next_node=node_ptr->next_node,但这会中断程序,根本不会运行。进行更改会导致生成错误。程序将不会启动。我收到一条警告,上面写着“C6001使用未初始化的内存‘previous_node’”。这是编译错误还是警告?如果是警告,您可以忽略它。您可能需要将编译器配置为忽略警告。这只是一个警告。但是,一旦进行了更改,程序将不会运行。如果我按ctrl+F5,将弹出一个框,显示“存在生成错误。是否继续并运行上次成功的生成?”这是在microsoft visual Studio社区中运行的。我不确定这是否会产生影响。你确定没有任何其他错误会阻止成功生成吗?进行更改会导致生成错误。程序将不会启动。我收到一条警告,上面写着“C6001使用未初始化的内存‘previous_node’”。这是编译错误还是警告?如果是警告,您可以忽略它。您可能需要将编译器配置为忽略警告。这只是一个警告。但是,一旦进行了更改,程序将不会运行。如果我按ctrl+F5,会弹出一个框,上面写着“有构建e
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;
        }       

    }
}