A Two Way linked list is a type of link list which contains two part as first link part pointing towards next node while second link part is pointing toward previous node. As shown in picture –
PROGRAM TO INSERT AND DELETE AND TRAVERSING THE TWO WAY LL – If you think it is a bit larger then go function wise. It will help you implementing program for 1 operation.
#include"iostream.h" #include"conio.h" using namespace std; class list { struct node { int info; node *flink; node *blink; }*p; public: list() { p=NULL; } int ins_beg(int x); int ins_end(int x); int del_beg(); int del_end(); int del_giv(int x); int disp(); }; /*INSERTION AT BEG FUNCTION BY C#ODE STUDIO*/ int list::ins_beg(int x) { node *ptr; ptr=p; p=new node; p->info=x; p->blink=NULL; p->flink=ptr; if(ptr==NULL) cout<<"\nVALUE INSERTED"; else { ptr->blink=p; cout<<"\nVALUE INSERTED"; } } /*INSERTION AT END FUNCTION BY C#ODE STUDIO*/ int list::ins_end(int x) { node *temp,*ptr; ptr=p; if(ptr==NULL) ins_beg(x); else { temp=new node; temp->flink=NULL; temp->info=x; while(ptr->flink!=NULL) { ptr=ptr->flink; } temp-> blink=ptr; ptr->flink=temp; cout<<"\nVALUE INSERTED"; } } /*DELETION AT BEG FUNCTION BY C#ODE STUDIO*/ int list::del_beg() { node *ptr,*temp; ptr=p; if(ptr==NULL) cout<<"\nUNDERFLOW, EXITING..."; else { if(ptr->flink==NULL && ptr->blink==NULL) ptr=NULL; else { temp=ptr->flink; p=ptr->flink; temp->blink=NULL; ptr->flink=NULL; } } cout<<"\nVALUE DELETED"; } /*DELETION AT END FUNCTION BY C#ODE STUDIO*/ int list::del_end() { node *ptr,*temp; ptr=p; if(ptr==NULL) cout<<"\nUNDERFLOW "; else if(ptr->flink==NULL && ptr->blink==NULL) ptr=NULL; else { while(ptr->flink!=NULL) { temp=ptr; ptr=ptr->flink; } temp->flink=NULL; ptr->blink=NULL; } cout<<"\nVALUE DELETED"; } /*DELETION OF VALUE FUNCTION BY C#ODE STUDIO*/ int list::del_giv(int x) { node *ptr,*temp1,*temp2; ptr=p; temp1=NULL; temp2=NULL; if(ptr==NULL) cout<<"\nUNDERFLOW OCCURS : NO DATA"; else { while(ptr->flink!=NULL && ptr->info!=x) { temp1=ptr; ptr=ptr->flink; temp2=ptr->flink; } if(ptr->flink==NULL && ptr->blink==NULL) ptr=NULL; else if(ptr->flink==NULL && ptr->blink!=NULL) { temp1->flink=NULL; ptr->blink=NULL; } else { temp1->flink=temp2; temp2->blink=temp1; ptr->flink=NULL; ptr->blink=NULL; } cout<<"\nVALUE DELETED = "<<x; } } /*DISPLAY FUNCTION BY C#ODE STUDIO*/ int list::disp() { node *ptr; ptr=p; cout<<"START => "; while(ptr!=NULL) { cout<<ptr->info<<" => "; ptr=ptr->flink; } cout<<" NULL "; } /*MAIN FUNCTION BY C#ODE STUDIO*/ int main() { list l; int num,choice,i=1; cout<<"\nPROGRAM OF TWO WAY LINKED LIST : READ AND MAKE CHOICE"<<endl<<endl; while(i!=0) { cout<<"\n\t1:INSERTION AT BEG" <<"\n\t2:INSERTION AT END" <<"\n\t3:DELETION FROM BEG" <<"\n\t4:DELETION FROM END" <<"\n\t5:DELETE AN ELEMENT" <<"\n\t6:DISPLAY"<<endl; cout<<"\nENTER YOUR CHOICE : "; cin>>choice; switch(choice) { case 1: cout<<"\nENTER NUMBER : "; cin>>num; l.ins_beg(num); break; case 2: cout<<"\nENTER NUMBER : "; cin>>num; l.ins_end(num); break; case 3: l.del_beg(); break; case 4: l.del_end(); break; case 5: cout<<"\nENTER NUMBER : "; cin>>num; l.del_giv(num); break; case 6: l.disp(); break; default: cout<<"\nWRONG CHOICE : MAKE CHOICE AGAIN"; } cout<<"\n\n\tPRESS 1:CONTINUE AND 0:EXIT ::: "; cin>>i; } cout<<"\nPROGRAMMING @ C#ODE STUDIO"; getch(); }
OUTPUT –
Will be long. So click on image to see output.