

Однонаправленный список через функции С++
Удалить (затереть) из списка все элементы, встречающиеся более одного раза. Из введенных 1 1 2 5 1 1 получается 1 2 5 1. Не совсем понимаю как затереть вторую единицу. Необходимо использовать именно однонаправленный и без классов.
Возможно можно сделать как-то через цикл, но нет идей как каждому элементу присвоить порядковый номер...
Мой вариант кода:
#include<iostream>
#include<stdio.h>
using namespace std;
typedef struct ELEMENT {
int data;
ELEMENT* next;
}; ELEMENT;
void CreateHead(ELEMENT** head, ELEMENT** last) {
*head = new ELEMENT;
(*head)->next = NULL;
*last = *head;
}
void addElement(ELEMENT** last, int x) {
ELEMENT* q;
q = new ELEMENT;
q->data = x;
q->next = NULL;
(*last)->next = q;
*last = q;
}
void Print(ELEMENT* head) {
ELEMENT* q;
q = head->next;
while (q != NULL) {
cout << q->data << " ";
q = q->next;
}
}
void Delete(ELEMENT* head, ELEMENT** last) {
ELEMENT* q, * t;
q = head;
while (q->next != NULL) {
if (q->data == q->next->data) {
t = q->next;
q->next = q->next->next;
}
else q = q->next;
}
*last = q;
}
void Distruct(ELEMENT* head, ELEMENT** last) {
ELEMENT* q, * t;
q = head->next;
while (q != NULL) {
t = q;
q = q->next;
free(t);
}
head->next = NULL;
*last = head;
}
int main() {
ELEMENT* head, * last;
int a;
CreateHead(&head, &last);
cout << "a = "; cin >> a;
while (a != 0) {
addElement(&last, a);
cout << "a = "; cin >> a;
}
Print(head);
cout << endl;
Delete(head, &last);
Print(head)
Distruct(head, &last);
return 0;
}
Создать вспомогательный индексный массив элементов для удаления, вместо if (q->data == q->next->data) проверять через вспомогательный массив?
Если во вспомогательном массиве есть элемент , то удалять.