C++ 在列表末尾添加节点

C++ 在列表末尾添加节点,c++,pointers,linked-list,nodes,C++,Pointers,Linked List,Nodes,我想在列表的末尾添加一个节点,这段代码可以处理这个问题,但是当我添加第三个节点时,它会删除第一个节点。第二个节点成为第一个节点,第三个节点成为第二个节点。有什么问题 struct Clothes { int item_id; string name_of_clothing; Clothes * next; Clothes * back; }*new_item, *temp, *last, *list; int a

我想在列表的末尾添加一个节点,这段代码可以处理这个问题,但是当我添加第三个节点时,它会删除第一个节点。第二个节点成为第一个节点,第三个节点成为第二个节点。有什么问题

struct Clothes
    {
        int item_id;
        string name_of_clothing;
        Clothes * next;
        Clothes * back;
    }*new_item, *temp, *last, *list;


int add_clothing() {
    string name_of_clothing, item_id;
    cout << "Enter ID\t: ";
    cin >> item_id;
    cout << "Enter Name of item\t: ";
    cin >> name_of_clothing;
    string new_item[2] = { item_id, name_of_clothing};
    add_New_item(new_item[0], new_item[1]);
    system("PAUSE");
    palce_and_order_menu();
    return 0;
}
void  add_New_item(string item_id, string name_of_clothing)
{
    new_item = new Clothes();
    new_item->item_id = std::stoi(item_id);
    new_item->name_of_clothing = name_of_clothing;
    if (temp == NULL)
    {
        temp = last = new_item;
        cout << "\n>Element inserted in empty list\n";
    }


    else
          {
             while (temp->next != NULL){
                    temp = temp->next;          
             }
             last->next = new_item;
             new_item->back = last;
             last = new_item;
             cout << "\n>Element inserted \n";
        }
}
struct
{
int item_id;
衣服的字符串名称;
衣服*下一步;
衣服*背;
}*新项目,*临时,*最后,*列表;
int add_服装(){
衣服的字符串名称,项目id;
cout>item\u id;
服装的名称;
字符串new_item[2]={item_id,name_of_clothing};
添加新项目(新项目[0],新项目[1]);
系统(“暂停”);
palce_和_order_菜单();
返回0;
}
void add_New_item(字符串item_id,字符串name_of_衣服)
{
新项目=新衣服();
新建项目->项目id=std::stoi(项目id);
新建衣服->衣服名称=衣服名称;
if(temp==NULL)
{
临时=最后一个=新项目;
cout next!=空){
温度=温度->下一步;
}
最后->下一步=新项目;
新建项目->返回=上次;
最后一项=新项目;

cout我认为插入新节点的一般逻辑应该如下所示:

while (temp->next != NULL) {
    temp = temp->next;          
}
temp->next = new_item;
new_item->back = temp;
// last = new_item
cout << "\n>Element inserted \n";
while(临时->下一步!=NULL){
温度=温度->下一步;
}
临时->下一步=新项目;
新建项目->返回=温度;
//最后一项=新项目

cout基于您对我的评论的回复以及关于列表实施的有限信息。我建议如下-
由于您正在跟踪列表的头部(通过
temp
)和尾部(通过
last
),并且插入操作在末尾完成,因此插入新节点的功能应该如下所示-

void  add_New_item(string item_id, string name_of_clothing)
{
    new_item = new Clothes();
    new_item->item_id = std::stoi(item_id);
    new_item->name_of_clothing = name_of_clothing;
    new_item->back=NULL;
    new_item->next=NULL;
    if (temp == NULL)
    {
        temp = last = new_item;
        cout << "\n>Element inserted in empty list\n";
    }


    else
          {

             last->next = new_item;
             new_item->back = last;
             last = new_item;
             cout << "\n>Element inserted \n";
        }
}
void add\u New\u项目(字符串项目\u id,字符串名称\u服装)
{
新项目=新衣服();
新建项目->项目id=std::stoi(项目id);
新建衣服->衣服名称=衣服名称;
新建项目->返回=空;
新建项目->下一步=空;
if(temp==NULL)
{
临时=最后一个=新项目;
cout next=新项目;
新建项目->返回=上次;
最后一项=新项目;

难道
last
指针应该代表什么?列表的开头还是结尾?您的总体逻辑似乎是正确的,但是如果您能够澄清
temp
last
应该做什么,那将是有帮助的。如果
temp
指向列表的开头,那么在
whi中修改它le
循环和不恢复其以前的值是您丢失列表标题的原因。@GAURANGVYAS是的,它是标题。我如何恢复以前的值?如果这个答案对您有帮助,我们可以重复这个答案。