Saturday, 17 September 2011

Delete middle node, 1st node or last node

Delete middle node, 1st node or last node

//deleting a particular node
#include<stdio.h>
#include<iostream.h>
#include<conio.h>
template<class T>
class node
{
 node<T> *llink;
 T data;
 node<T> *rlink;
 friend class dll<T>;
};
template <class T>
class dll
{
 private:
        node<T> *l,*r;
 public:
        dll();
       ~dll();
        int isempty();
        void display();
        int length();

        int del(int i);

void append(node<T>*k);
void create();
};
template<class T>
dll<T>::dll()
{
 l=r=NULL;
}
template<class T>
int dll<T>::isempty()
{
 return(l==NULL);
}
template<class T>
void dll<T>::display()
{

 node<T> *p;
 if(isempty())
 {
  cout<<"DLL is empty\n";
 }
 else
 {
   cout<<"DLL is as follows\n";
   for(p=l;p!=NULL;p=p->rlink)
     cout<<p->llink<<"\t"<<p->data<<"\t"<<p->rlink<<"\n";
 }
}
//length()
template<class T>
int dll<T>::length()
{
 int ctr=0;
 node<T> *p;
 p=l;
 while(p!=NULL)
 {
  ctr++;
  p=p->rlink;
 }
 return(ctr);
}
//apend()
template<class T>
void dll<T>::append(node<T>* k)
{
 node<T> *last;
 k->rlink=NULL;
 if(isempty())
   l=r=k;
 else
 {
   //last=r;
   last=l;
   while(last->rlink!=NULL)
   {
    last=last->rlink;
   }
   last->rlink=k;
   r=last;
  }
}
//create()
template<class T>
void dll<T>::create()
{
  T x;
  node<T> *k;
  l=r=NULL;
  cout<<"enter values terminated by -1 or !\n";
  cin>>x;
  while(x!=-1&&x!='!')
  {
   k=new node<T>;
   k->data=x;
   append(k);
   cin>>x;
   r=r->rlink;
  }
 }//create()

template<class T>
dll<T>::~dll()
{

}
//dele()
template <class T>
T dll<T>::del(int i)
{
 node<T>*p,*prev,*next;
 T x;
 if(i<1||i>length())
  return(-1);
 else if(l==r)
 {
  p=l;
  l=r=NULL;
  x=p->data;
  delete p;
  return(x);
 }
 else if(i==1)
 {
  p=l;
  l=l->rlink;
  l->llink=NULL;
  x=p->data;
  delete p;
  return(x);
 }
 else if(i==length())
 {
  p=r;
  r=r->llink;
  r->rlink=NULL;
  x=p->data;
  delete p;
  return(x);
 }
 else
 {
  p=l;
  for(int j=1;j<=i-1;j++)
   p=p->rlink;
  prev=p->llink;
  next=p->rlink;
  prev->rlink=next;
  next->llink=prev;
  x=p->data;
  delete p;
  return(x);
 }
}


main()
{
 dll<int>a;
 node<int>*p;
 int ch,i,x;
 clrscr();
 a.create();
 cout<<"enter value of i\n";
 cin>>i;
 x=a.del(i);
 if(x==-1)
  cout<<"Non-existing node\n";
 else
  cout<<"data of deleted node is"<<x<<"\n";
 a.display();

getch();
return(0);

}//main()



Types of Linked list
1.     Single Linked List

Some terminology of Doubly Linked List programs

No comments:

Post a Comment