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++;
    }
    


Ответы (0 шт):