Проблема в удалении элементов из односвязного списка

Проблема: не выходит удалять элементы односвязного списка по заданному значению (прим. для списка вида 1 1 2 3, необходимо, что программа вывела 2 3)

Проблема заключается не только в том, что программа не удаляет элемент из списка, а также и в том, что если элемента в списке два, то начинаются проблемы.

Реализация метода удаления элемента из списка (по заданному значению):

void deleteNode(int value){
    Node *temp = head;
    Node *previous = nullptr;
    for (int i = 0; i < value; i ++){
        previous = previous->nextAddress;
    }
    Node *deleteNode = previous->nextAddress;
    previous->nextAddress = deleteNode->nextAddress;
}

Сам список:

struct Node{
int data;
Node *nextAddress;
};
class List{

private:
    Node *head;
    Node *tail;
public:
    List(){
        head = nullptr;
        tail = nullptr;
    }

UPD: Благодаря @DmitryK разобрался с реализацией удаления элемента из списка, но возникла проблема, как именно удалить все дубликаты из списка? Проходиться по нему несколько раз в цикле? Не могу додуматься.

Реализация удаления элемента:

void deleteNode(int value){
    Node *temp = head;
    Node *element = nullptr;
    if (head and head->data == value){
        element = head;
        head = head->nextAddress;
        delete element;
        return;
    }
    while (temp->nextAddress){
        if (temp->nextAddress->data == value){
            element = temp->nextAddress;
            temp->nextAddress = element->nextAddress;
            delete element;
            break;
        }
        temp = temp->nextAddress;
    }
}

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