#include using namespace std; class simpleItem { public: simpleItem() {}; virtual ~simpleItem() {}; virtual bool ordineInverso() = 0; virtual void visualizza() = 0; }; class intItem: public simpleItem { private: int data; public: intItem(int i): data(i) {}; bool ordineInverso() override { return data%2; // i numero dispari vanno in ordine inverso }; void visualizza() override { cout << data<<" "; }; }; class charItem: public simpleItem { private: char data; public: charItem(char c): data(c) {}; bool ordineInverso() override { return (data=='a'||data=='e'||data=='i'||data=='o'||data=='u'); // le vocali vanno in ordine inverso }; void visualizza() override { cout << data <<" "; } }; class simpleNode { public: simpleItem *item; simpleNode *next; simpleNode(simpleItem *i): item(i), next(nullptr) {}; ~simpleNode() {}; }; class simpleList { private: simpleNode *head; simpleNode *tail; public: simpleList(): head(nullptr), tail(nullptr) {}; ~simpleList(); bool isEmpty(); simpleList *HInsert(simpleItem *); simpleItem *HRemove(); simpleList *TInsert(simpleItem *); simpleItem *TRemove(); };