Я реализовал двусвязный список.Проблема состоит в том, чтобы удалить узел с определенным значением.Для этого мне сначала нужно найти это значение в списке.Если он существует, я должен удалить его, установив остальные указатели соответственно.Я даже пытался удалить, используя «free» вместо «delete», но в моем случае это тоже не сработало.В коде нет ошибок, но узел не удаляется после выполнения.Вот мой код:
void remove(i)
{
node *n= find(i);
node *prev= n->GetPrev();
node *next=n->GetNext();
if(n!=NULL)
{
if(prev!=NULL && next!=NULL)
{
prev->SetNext(next);
next->SetPrev(prev);
delete n;
}
else if(prev!=NULL && next==NULL)
{
prev->SetNext(NULL);
delete n;
}
}
}
PS Я написал код для всех возможных случаев одинаково.
Деструктор для этого класса записывается как:
~DL()
{
node *current = head;
while (current)
{
node<T> *next = current->GetNext();
delete current;
current = next;
}
delete head;
delete tail;
}
Я вставил различные целочисленные значения в список.Вставка работает правильно.Но когда я пытаюсь удалить узлы, вставленные в список, используя цикл, возвращается тот же узел, который был ранее в заголовке, показывая, что он не был удален раньше.Функция checkRemove реализует эти шаги.
checkRemove()
{
for (int i = 0; i < 50; i++)
{
addToHead(i);
}
while(length>10)
node *temp= returnHead();
if (temp != NULL)
cout<<"Value of head node is "<<temp->returnValue()<<endl;
remove(temp->returnValue());
}
В моем случае значения в списке различны, поэтому они встречаются только один раз.Оператор print печатает оператор «Значение узла узла» только дважды вместо печати значений до тех пор, пока длина списка не станет равной 9.