std::forwarded_list , помогите реализовать метод "удаление по значению" (void remove (const T& value))
Нужна помощь в реализации данного метода класса направленного списка. Метод должен получать значение по ссылке, сравнить с значением ячейки(Node) списка и если они совпадают то ячейку удалить не нарушив последовательность. Уточнено: Должны быть удалены ВСЕ ячейки с этим значением, после использования метода.
Вот что мы имеем. Заранее скажу, что метод _erase_after() работает корректно при любых значениях. Вот он.
void My_forwarded_list<T>::_erase_after(int pos) noexcept
{
if (pos < __size && pos!=-1)
{
Node* current = this->head;
Node* previous = current;
for (int i = 0; i < pos; ++i)
{
previous = current;
current = current->next_p;
}
previous->next_p = current->next_p;
delete current;
current = previous;
}
else if (pos == -1)
{
this->_pop_front();
}
else
{
this->_erase_after(__size - 1);
}
this->__size--;
}
А вот сам метод который не получается. Не могу понять в чем проблема. Даже откладкой пробывал, больше запутался.
template <typename T>
void My_forwarded_list<T>::_remove(const T& value)
{
Node* current = this->head;
int i = -1;
while (current != nullptr)
{
if (current->value == value)
{
current = current->next_p; // Чтобы избежать потери ссылки на следующий элемент, я перехожу на следующий объект до его удаления.
this->_erase_after(i);
}
else current = current->next_p;
i++;
}