#include class node { public: int value; //value stored in the node node *next; //pointer to next node node *prev; //pointer to previous node }; class dlist { public: node *front; //pointer to front of list node *back; //pointer to back of list dlist() { front=NULL; back=NULL; } void insertFront(int value); void insertBack(int value); void removeFront(); void removeBack(); void insertBefore(int value,node *nodeB); void insertAfter(int value,node *nodeA); void removeBefore(node *nodeB); void removeAfter(node *nodeA); void removeNode(node *newNode); void printDListFront(); void printDListBack(); }; //insert a node before nodeB void dlist::insertBefore(int value,node *nodeB) { node *newNode; newNode=new node(); newNode->prev=nodeB->prev; newNode->next =nodeB; newNode->value =value; if(nodeB->prev==NULL) { this->front=newNode; } nodeB->prev=newNode; removeNode(newNode); } //insert a node before the front node void dlist::insertFront (int value) { node *newNode; if(this->front==NULL) { newNode=new node(); this->front=newNode; this->back =newNode; newNode->prev=NULL; newNode->next=NULL; newNode->value=value; } else { insertBefore(value,this->front ); } } //insert a node after nodeB void dlist::insertAfter(int value,node *nodeB) { node *newNode; newNode=new node(); newNode->next= nodeB->next ; newNode->prev =nodeB; newNode->value =value; if(nodeB->next==NULL) { cout<<"\n "<< endl; this->back =newNode; } nodeB->next=newNode; cout<<"2"<back==NULL) { cout<<"insert at back"; insertFront(value); } else { cout<<"insert at back"; insertAfter(value,this->back ); } } //remove the front node void dlist::removeFront () { removeNode(this->front); } //remove a back node void dlist::removeBack () { removeNode(this->back); } //remove before a node void dlist::removeBefore(node *nodeB) { if(nodeB->prev==this->front) { this->front=nodeB; this->front->prev=NULL; } else { removeNode(nodeB->prev); } } //remove after a node void dlist::removeAfter(node *nodeA) { if(nodeA->next==this->back) { this->back=nodeA; this->back->next=NULL; } else { removeNode(nodeA->next); } } //remove a perticular node void dlist::removeNode(node *nodeToRemove) { if(nodeToRemove==this->front) { this->front=this->front->next; this->front->prev=NULL; } else if (nodeToRemove==this->back) { this->back=this->back->prev; this->back->next=NULL ; } else { nodeToRemove->prev->next=nodeToRemove->next; nodeToRemove->next->prev=nodeToRemove->prev; } } //Print the list from front void dlist::printDListFront() { node* curr2; curr2= this->front; cout<<"\n-----\n"; cout<<"Queue\n"; cout<<"-----\n"; //cout<<"size:"<value<<"|"; curr2=curr2->next; } cout<back; cout<<"\n-----\n"; cout<<"Queue\n"; cout<<"-----\n"; //cout<<"size:"<value<<"|"; curr2=curr2->prev; } cout<insertBack(8); st->printDListFront (); st->insertBack(5); st->printDListFront (); st->insertBack(6); st->printDListFront (); st->insertFront(1) ; st->printDListFront (); st->insertFront(3) ; st->printDListFront (); st->insertBack(7); st->printDListFront (); st->removeFront(); st->printDListFront (); st->removeBack(); st->printDListFront (); }