#include using namespace std; struct node { int val; node * next; node * prev; }; struct DLL { node *head; void init() { head = NULL; } void insertBegin(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; } else { new_node->next = head; head->prev = 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; } else { node *tmp = head; while(tmp->next != NULL) { tmp = tmp->next; } tmp->next = new_node; new_node->prev = tmp; } } void insertAfterNode(int x, node *tmp) { if(tmp->next == NULL) { insertEnd(x); } else { node *new_node = new node; new_node->val = x; new_node->next = tmp->next; tmp->next->prev = new_node; new_node->prev = tmp; tmp->next = new_node; } } void insertBefore(int x, node *tmp) { if(tmp->prev == NULL) { insertBegin(x); } else { node *new_node = new node; new_node->val = x; new_node->prev = tmp->prev; tmp->prev->next = new_node; tmp->prev = new_node; new_node->next = tmp; } } void deleteBegin() { if(head != NULL) { if(head->next == NULL) { delete head; head = NULL; } else { node *tmp = head; head = head->next; head->prev = NULL; delete tmp; } } } void deleteEnd() { if(head != NULL) { if(head->next == NULL) { delete head; head = NULL; } else { node *tmp = head; while(tmp->next != NULL) { tmp = tmp->next; } tmp->prev->next = NULL; tmp->prev = NULL; delete tmp; } } } void deleteAll() { while(head != NULL) { deleteBegin(); } } void print() { node * tmp = head, *last_node; while(tmp != NULL) { cout << tmp->val << " <--> "; last_node = tmp; tmp = tmp->next; } cout << endl; while(last_node != NULL) { cout << last_node->val << " <--> "; last_node = last_node->prev; } cout << endl; } }; int main() { DLL dll; dll.init(); dll.insertBegin(1); dll.insertBegin(2); dll.insertEnd(3); dll.insertEnd(4); dll.insertEnd(5); node *tmp = dll.head; tmp=tmp->next; dll.insertAfterNode(6, tmp); // dll.print(); tmp = dll.head; tmp=tmp->next->next; dll.insertBefore(7, tmp); dll.print(); return 0; }