这是我的remove函数,用于删除具有item
元素的节点。我得到了一个seg错误,我很确定这是因为temp->prev是前面的哨兵,所以从技术上来说,它不在双链表中。如果这是正确的,我实际上如何防止这种情况?如有任何帮助,不胜感激。
编辑:刚刚更新了代码,但仍然出现了Seg错误
void list::remove(const list_element & item)
{
list_node* temp = _front;
for (int i = 0; i < _size; i++)
{
if (temp -> next -> data == item)
{
if (temp -> prev == _front)
{
_front = temp -> next;
}
else if (temp -> next == _rear)
{
temp -> prev -> next = _rear;
}
else
{
temp -> prev -> next = temp -> next;
temp -> next -> prev = temp -> prev;
}
}
delete temp;
}
}
您希望使用while()
循环逐节点地遍历列表。由于_front
是一个哨兵,因此不需要明确检查next
或prev
节点是head还是tail。
void list::remove(const list_element& item) {
list_node* current = _front;
while (current->next != nullptr) {
if (current->next->data == item) {
current->next = current->next->next;
if (current->next != nullptr) {
delete current->next->prev;
current->next->prev = current;
}
break;
}
current = current->next;
}
// update pointer to rear if it changed
if (current->next == nullptr)
_rear = current;
}
双链表节点是在main函数中创建的。Ender和header已定义。在删除节点函数处中断-ender为空。 释放最后一个和第一个输入的内存的最佳方法是什么,即:删除:233,A和888,F?
我试图从基于阉羊的双链表中删除一个元素,该列表中的节点满足返回bool的函数。由于某种原因,替换节点的前一个指针(下一个被删除)不更新,而是引用回它自己。 我的代码 测试结果
我有麻烦删除双向链表中的节点,程序崩溃,我不能解决这个问题。你能帮我吗?这是创建新节点,查看它们并删除它们的完整代码。 我认为这个问题与Node del的scanf()有关,但我不确定。当我只是通过或
我理解得对吗?(从虚拟节点开始) dummy->a->b->c->d->dummy(环绕到dummy节点) 因此,如果我想删除第一个实际的数据段(A),我需要将它分配给一个临时变量。所以Node first=head.next。然后我需要有一个虚拟的头部引用“B”,所以我需要做head.next=first.next。这就是所有需要做的吗? 在从列表中删除任何节点N的情况下(假设它在列表中),这是
我的问题是,如果用户输入一个姓氏,并且在链接列表中有多个相同的姓氏,并且其中一个姓氏在head节点中。如何在不删除头部节点的情况下删除另一个姓氏。我尝试了一些我能想到的方法,但是删除了所需的节点(这很好),包括头部节点(这不是我想要的…)
我写了下面的代码,但它在执行create()函数后停止工作。我想从头节点开始删除替代元素。我的delete_Alt()函数正确吗?请告诉我哪里错了。