#include template class Node { private: E content; Node *next; public: Node(const E &_content) : content(_content), next(this){}; Node(const E &_content, Node *nextPtr) : content(_content), next(nextPtr){}; void setNext(Node *_ptr) { this->next = _ptr; } E &getContent() { return this->content; } Node *getNextPtr() { return this->next; } }; template class Iterator { private: Node *current; public: Iterator(Node *start) : current(start){}; E &peekNext() { return this->current->getNextPtr()->getContent(); } void next() { this->current = this->current->getNextPtr(); } E &peek() { return this->current->getContent(); } Node *peekNode() { return this->current; } void insertHere(const E &newItem) { this->current->setNext( new Node(newItem, this->current->getNextPtr())); } }; template class List { private: // int _length; Node head; public: List(const E &dummyValue) : head(Node(dummyValue)){ // this->_length = 0; }; void insert(const E &target, const E &newItem) { Iterator iter = Iterator(&this->head); // Remember to add a loop to stop at length!!; while (iter.peek() != target) { iter.next(); } iter.insertHere(newItem); // this->_length++; } void remove(const E &target) { Iterator iter = Iterator(&this->head); while (iter.peekNext() != target) { iter.next(); } Node *toBeDeleted = iter.peekNode()->getNextPtr(); iter.peekNode()->setNext(toBeDeleted->getNextPtr()); delete toBeDeleted; // this->_length--; } Iterator iterate() { return Iterator(&this->head); } }; int read_num() { int summ = 0; char c = getchar(); while (c < '0' || c > '9') { c = getchar(); } while (c >= '0' && c <= '9') { summ = summ * 10 + c - '0'; c = getchar(); } return summ; } int main() { List aList(0); aList.insert(0, 1); int n; int cmd, x, y; // scanf("%d", &n); n = read_num(); while (n) { cmd = read_num(); x = read_num(); // scanf("%d %d", &cmd, &x); switch (cmd) { case 1: { // scanf("%d", &y); y = read_num(); aList.insert(x, y); break; } case 2: { Iterator iter = aList.iterate(); while (iter.peek() != x) { iter.next(); } printf("%d\n", iter.peekNext()); break; } case 3: { aList.remove(x); } } n--; } Iterator iter = aList.iterate(); iter.next(); while (true) { int content = iter.peek(); if (content == 0) { break; } printf("%d\n", content); iter.next(); } return 0; }