Проблема в удалении элементов из односвязного списка
Проблема: не выходит удалять элементы односвязного списка по заданному значению (прим. для списка вида 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;
}
}