/* Задача VIII.3: Използвайки функцията Find от Задача VIII.2, да се разработи рекурсивна процедура void Print_Without_Dups(point P) която извежда на екрана без повторения елементите на линеен едносвързан списък P. Например списъкът <2, 4, 3, 2, 5, 6, 5, 1>, изведен на екрана, трябва да изглежда <4, 3, 2, 6, 5, 1>. */ #include #include struct Node { int data; struct Node* next; } *first = NULL, *last = NULL; using namespace std; void addNumbers(int x) { if(first == NULL) { first = new Node; first->data = x; first->next = NULL; last = first; } else { Node *t = new Node; t->data = x; t->next = NULL; last->next = t; last = t; } } void displayList(struct Node *p) // recursive { if(p) { cout << p->data << " "; displayList(p->next); } } bool Find(int x, struct Node*p) { if(p) { if(p->data == x) return true; else Find(x,p->next); } else return false; } void Print_Without_Dups(struct Node* p) { if(p) { auto res = Find(p->data, p->next); if(res == false) { cout << p->data << " "; } Print_Without_Dups(p->next); } } int main() { //2, 4, 3, 2, 5, 6, 5, 1 addNumbers(2); addNumbers(4); addNumbers(3); addNumbers(2); addNumbers(5); addNumbers(6); addNumbers(5); addNumbers(1); cout << endl; int res = Find(7,first->next); Print_Without_Dups(first); }