void remove(const T& el) { while(head != nullptr && head->data == el) { node* toDelete = head; head = head->next; delete toDelete; } if(head == nullptr) tail = nullptr; node* previous = head; while(previous != nullptr) { if(previous->next != nullptr&&previous->next->data == el) { node* toDelete = previous->next; previous->next = previous->next->next; if(previous->next == nullptr) tail = previous; delete toDelete; } else previous = previous->next; } }