在列表末尾添加节点
Add node at the end of a list
我想在列表的末尾添加一个节点,这段代码可以处理这个问题,但是当我添加第 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 指针。
相关文章:
- 将树节点添加到向量向量中的 n 元树遍历的平均和最坏情况时间复杂度是多少?
- 在单链表前面添加一个节点后,我无法遍历每个节点
- 如何使用LLVM C++API向保留节点列表添加
- 如何确保我的节点被添加到链接列表中
- 如何将节点添加到链表
- 在 C++ 中使用 temp 变量将节点添加到链表的末尾
- 想要以最新的添加节点完整返回树节点的根
- 在列表末尾添加节点
- 如何在提升property_tree前面添加节点
- C++ & cocos2dx -- 无法以编程方式添加节点
- 链接列表C 类,这两个添加节点实现之间的差异是什么?
- 最后在C++的链表中添加节点
- 在ITH位置添加节点
- 单链表在中间添加节点
- 添加节点时C++二叉搜索树状态访问冲突错误
- boostpropertytree在循环中添加节点
- 正在链接列表前面添加节点
- 向二叉搜索树添加节点
- 程序不读取和添加节点到2双链表c++
- 向链表中添加节点