Я пытаюсь написать код для удаления узла из кругового двусвязного списка. Я написал следующую функцию, которая в основном работает:
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 в номер индекса. Вместо этого он всегда удаляет хвост. Если вы думаете, что что-то не так с моим кодом где-то в другом месте, я тоже посмотрю на это.
Я думаю, что я понял это. В основном я использовал функции для удаления головы …
Node* temp = head;
head = head->next;
head->prev = tail;
tail->next = head;
delete temp;
return true;
…и убрать хвост:
Node* temp = tail;
tail = tail->prev;
tail->next = head;
head->prev = tail;
delete temp;
return true;
Очевидно, что простого перемещения вокруг головы и хвоста было недостаточно, чтобы фактически удалить эти узлы.
Других решений пока нет …