#include #include "stack.h" using namespace std; void solve(stack *&h) { stack *res = NULL; while (h) { stack *tmp = NULL; // Будем убирать из стека все повторения его верхнего элемента. int el = pop(h); // Так как все повторения будут убраны, можно положить // значение в стек с результатом. push(res, el); while (h) { int cur = pop(h); if (cur != el) push(tmp, cur); } // После выполнения предыдущего цикла, в стеке не осталось // значений, равных el. Обновим h и запустим на нём этот же // самый алгоритм. while (tmp) push(h, pop(tmp)); } reverse(res); h = res; } int main() { int n; cout << "n = "; cin >> n; stack *head = NULL; int x; for (int i = 0; i < n; i++) { cin >> x; push(head, x); } reverse(head); solve(head); while (head) cout << pop(head) << " "; cout << endl; return 0; }