理解链表中的排队

understanding enqueue in a linked list

嘿,我正在尝试添加到我的队列中,但我遇到了问题,我需要一些帮助 我为我的队列使用了一个链接列表,问题是当我将第三个项目添加到我的列表时,我覆盖了第二个 这是代码

void addnode(node* data)
{
    if (begin == NULL)
    {
        data->next = begin;
        begin = data;
    }
    else
    {
        end = data; //this is where the problem when i add a 3rd data i dont save anywhere my end so its gone
        begin->next = end;
        end->next = NULL;
    }
}

在我的代码中,我在队列的开头开始,在队列的结尾结束

我建立的链表是用classes in c++, 但是每当我添加第三个数据时,第二个数据就会被覆盖,所以我总是有两个.. 我需要一些关于如何修复它的帮助,谢谢 :)

编辑这是更多代码:这是我的 class 队列

#include"node.h"
class queue
{
public:
    queue();
    ~queue();
    void addNode(node*);
private:
    node* begin;
    node* end;

};

这是我从

获取数据的class
using namespace std;
class node
{
    friend void printclient(node &);
public:
    node();
    ~node();
    void setstr(string);
    void setmoney(int);
    node* next;
private:
    string name;
    double money;
    int id;
};

函数可以看成下面的样子。我假设指针 data 指向的节点的数据成员 next 已经设置为 nullptr.

void addnode(node* data)
{
    if (begin == nullptr)
    {
        begin = end = data;
    }
    else
    {
        end = end->next = data;
    }
}

也就是说如果队列为空(指针beginend等于nullptr)然后begin和end设置为添加的指针。

否则,新节点被附加到队列的末尾。在这种情况下,指针end指向的节点的数据成员next被设置为新指针,这个指针成为结束指针。

注意队列的用户应该对class节点一无所知。 class 应声明为 class 队列的私有或受保护成员。并且方法 addNode 应该替代方法 push 声明应该看起来像

void push( const std::string &name, int id, double money );