-1
我试图编写一些代码从圆形双向链表中删除一个节点。我已经写了下面的函数,它主要作品:删除一个圆形双向链表中的节点
bool Circular::remove(int index)
{
if (head == NULL)
return false;
Node* current;
current = head;
if (index > 0)
{
for (int i = 0; i < index; i++)
{
current = current->next;
}
}
else if (index < 0)
{
for (int i = 0; i < abs(index); i++)
{
current = current->prev;
}
}
if (current == head)
{
head = current->next;
}
else if (current == tail)
{
tail = current->prev;
}
current->prev->next = current->next;
current->next->prev = current->prev;
return true;
}
我唯一的问题是,当我通过数字1到索引数量也不会删除正确的值。相反,它总是删除尾部。如果你认为我的代码在其他地方有问题,那么我也会研究它。
通过链接列表工作的好方法是笔和纸。绘制节点。绘制所有的链接。一个接一个,并且一次只有一个地方没有链接点,请将链接更改为所需的配置。编码你必须采取的步骤。还花一些时间学习使用系统的调试器。当您可以一行一行地观看程序时,加快解决问题的时间。 – user4581301
你能给出一个显示错误的完整测试用例吗? – mindriot
另外,你的'remove'方法泄漏内存;它会丢弃指针但不会删除该节点。 – mindriot