#include using namespace std; struct node { int val; node * next; node * prev; }; struct DLL { node *head; node *tail; void init() { head = NULL; tail = NULL; } void insertBegin(int x) { node *new_node = new node; new_node -> val = x; new_node->prev = NULL; new_node->next = NULL; if(head == NULL) { head = new_node; head->next = head; head->prev = head; tail = head; } else { new_node->next = head; head->prev = new_node; new_node->prev = tail; tail->next = new_node; head = new_node; } } void insertEnd(int x) { node *new_node = new node; new_node->val = x; new_node->next = NULL; new_node->prev = NULL; if(head == NULL) { head = new_node; head->next = head; head->prev = head; tail = head; } else { tail->next = new_node; new_node->prev = tail; new_node->next = head; head->prev = new_node; tail = new_node; } } void deleteBegin() { if(head != NULL) { if(head -> next == tail) { delete head; head = NULL; tail = NULL; } else { node *tmp = head; head = head->next; head->prev = tail; tail->next = head; delete tmp; } } } void deleteEnd() { if(head != NULL) { if(head -> next == tail) { delete head; head = NULL; tail = NULL; } else { node *tmp = tail; tail = tail->prev; tail->next = head; head->prev = tail; delete tmp; } } } void deleteAll() { while(head != NULL) { deleteBegin(); } } void print() { node *tmp = head; for(int i = 0; i < 10; i++) { cout << tmp->val << " " ; tmp=tmp->next; } cout << endl; tmp = tail; for(int i= 0; i < 10; i++) { cout << tmp->val << " " ; tmp = tmp->prev; } cout << endl; } }; int main() { DLL dll; dll.init(); dll.insertBegin(2); dll.insertBegin(1); dll.insertEnd(3); dll.insertEnd(4); dll.insertEnd(5); dll.print(); return 0; }