gpt4 book ai didi

c++ - 双向链表上的删除函数

转载 作者:行者123 更新时间:2023-11-28 07:00:54 27 4
gpt4 key购买 nike

我正在尝试让我的删除函数适用于双向链表。我觉得我的代码是正确的,但它一直在崩溃。我相信当我删除节点时它有一些事情要做,但我不确定编译器是否一直将我带到 throw.cpp?所以我不太确定出了什么问题。这是我的代码:

  ItemType remove(int index) 
{
ItemType name;
Node* temp;
Node* current;
int pos = 0;
int endpos = size - 1;

if (index >= 0 && index <= size)
{
if (index == 0)
{
temp = head;
delete head;
head = temp->next;
size--;
name = temp->info;
return name;
}
else if (index == size - 1)
{
temp = tail;
delete tail;
tail = temp->prev;
size--;
name = temp->info;
return name;
}
else if (index <= size/2)
{
current = head;
while (pos != index)
{
current = current->next;
pos++;
}
}
else if (index > size/2)
{
current = tail;
while (endpos != index)
{
current = current->prev;
endpos--;
}
}
}

temp = current;
current->prev->next = current->next;
current->next->prev = current->prev;
delete current;
size--;
name = temp->info;
return name;


}

如果有人能看到问题所在,那就太好了。

最佳答案

错误是什么?

一些建议,在删除头尾时,先设置新的头尾指针,再删除旧的。所以代码

 temp = head;
delete head;
head = temp->next;

应该改为

 temp = head;
head = temp->next;
delete temp;

对尾部做同样的事情。这是因为当你调用 delete head 时,与 head 指向相同位置的 temp 现在有垃圾值,所以你不能只需在后续命令中使用 temp->next

另外,当调用 name = temp->info 时,请确保它在变量被删除之前。

关于c++ - 双向链表上的删除函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22497952/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com