#include <iostream.h>
#include <conio.h>

class linklist
{
     private:

             struct node
         {
              int data;
            node *link;
         }*p;

   public:

             linklist();

         void append( int num );

         void add_as_first( int num );

         void addafter( int c, int num );

         void del( int num );

         void display();

         int count();

         ~linklist();
};

linklist::linklist()
{
     p=NULL;
}

void linklist::append(int num)
{
     node *q,*t;

   if( p == NULL )
   {
        p = new node;
      p->data = num;
      p->link = NULL;
   }
   else
   {
        q = p;
      while( q->link != NULL )
           q = q->link;

      t = new node;
      t->data = num;
      t->link = NULL;
      q->link = t;
   }
}

void linklist::add_as_first(int num)
{
     node *q;

   q = new node;
   q->data = num;
   q->link = p;
   p = q;
}

void linklist::addafter( int c, int num)
{
     node *q,*t;
   int i;
   for(i=0,q=p;i<c;i++)
   {
        q = q->link;
      if( q == NULL )
      {
           cout<<"\nThere are less than "<<c<<" elements.";
         return;
      }
   }

   t = new node;
   t->data = num;
   t->link = q->link;
   q->link = t;
}

void linklist::del( int num )
{
     node *q,*r;
   q = p;
   if( q->data == num )
   {
        p = q->link;
      delete q;
      return;
   }

   r = q;
   while( q!=NULL )
   {
        if( q->data == num )
      {
           r->link = q->link;
         delete q;
         return;
      }

      r = q;
      q = q->link;
   }
   cout<<"\nElement "<<num<<" not Found.";
}

void linklist::display()
{
     node *q;
   cout<<endl;

   for( q = p ; q != NULL ; q = q->link )
        cout<<endl<<q->data;

}

int linklist::count()
{
     node *q;
   int c=0;
   for( q=p ; q != NULL ; q = q->link )
        c++;

   return c;
}

linklist::~linklist()
{
     node *q;
   if( p == NULL )
        return;

   while( p != NULL )
   {
        q = p->link;
      delete p;
      p = q;
   }
}
  int node_value;
  int node_order;
void main()
{

   linklist ll;


	 int numx=0;

    while(numx != -1)
    {
	    cout << "Enter your chois \n";
  		 cout << "Dsiply nodes  (1)\n";
  		 cout << "Add new node Normal (2)\n";
  	    cout << "Add new node after any node (3)\n";
		 cout << "Add new node in first (4)\n" ;
		 cout << "Delete node (5)\n" ;
       cout << "Exit (-1)" ;

      cin >> numx;

       switch ( numx)
       {
       case 1:
			cout << "============================================";
         ll.display();
			cout << endl;
		   cout<<"No. of elements = "<<ll.count()<< endl;
         cout << "============================================ \n";
            break;
       case 2:
         	cout << "Please enter value of the node \n";
				cin >> node_value;
			   ll.append(node_value);

            break;

		case 3:
         	cout << "Please enter node number \n";
				cin >> node_order;
         	cout << "Please enter value of the node \n";
				cin >> node_value;
			   ll.addafter(node_order,node_value);
           break;
		case 4:
         	cout << "Please enter value of the node \n";
				cin >> node_value;
			  	ll.add_as_first(node_value);
           break;

  		case 5:
         	cout << "To Delete.Please enter value of the node \n";
				cin >> node_value;
            ll.del(node_value);
           break;

case -1:
      				cout << "User end the programe ... edit by AMansur \n" ;
        				cout << "Press any key to exit \n" ;
                  break;
		default:
      				cout << "Please enter corect choise" ;

		  }
     }

   getch();
}