在列表末尾添加节点

Add node at the end of a list

本文关键字:添加 节点 列表      更新时间:2023-10-16

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

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 IDt: ";
    cin >> item_id;
    cout << "Enter Name of itemt: ";
    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 listn";
    }

    else
          {
             while (temp->next != NULL){
                    temp = temp->next;          
             }
             last->next = new_item;
             new_item->back = last;
             last = new_item;
             cout << "n>Element inserted n";
        }
}

基于您对我的评论的回复以及有关您的列表实现的有限信息。我会提出以下建议——
由于您同时跟踪列表的头部(通过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 listn";
    }

    else
          {
             last->next = new_item;
             new_item->back = last;
             last = new_item;
             cout << "n>Element inserted n";
        }
}

您只需更改last指针,因为插入是在最后完成的。 仅当列表最初为空,然后插入元素时,才会更改temp
注意 -

  • 为表示列为不正确的名称会引起混淆。
  • 插入新节点时,您没有为其back分配,next指针指向 NULL 或任何合适的值,这可能会导致以后出现未定义的行为。该部分包含在上面的代码中。

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

while (temp->next != NULL) {
    temp = temp->next;          
}
temp->next = new_item;
new_item->back = temp;
// last = new_item
cout << "n>Element inserted n";

我不清楚last在这里代表什么。 假设你只有一个 HEAD 指针,那么使用 while 循环沿着列表向下走,直到到达最后一个节点,然后在那里添加新项是有意义的。 大多数情况下,这不会更改列表的 HEAD 指针。