hi guys. I created a simple code to build linked list.
following are the various files

Header file
Code:
class ListBuild
{
private:
	struct node {
		         int d;
			 node * next;  // next pointer
	};
	typedef node * list;  // list == node*
	list head ,tail,prev;           // pointer to head and tail static member
    static int sz;              // current size of list,static member
public:
	ListBuild () ;                    // default constructor 
	ListBuild (const ListBuild & Lst);   // copy constructor
	~ListBuild() ;                   // default destructor 
	int findlength()const;        // find size
	void insert(int newitem);    // add node
	void findpr()const;           // previous pointer that tail
	void remove();  // remove node
        void print();      // print list

};
Implementation file
Code:
#include <iostream>
#include "Link_list_build.h"
using namespace std;

int ListBuild::sz=0;
ListBuild ::ListBuild()                    // default constructor 
{

head=0;                           //Null pointer
tail=0;
prev=0;
}

ListBuild ::ListBuild(const ListBuild& lst)   // copy constructor
{

}

ListBuild ::~ListBuild()            // default destructor 
{
remove() ;               // call func to remove node memory
}

int ListBuild::findlength()const      // determine current size of list
{
	return sz;
}

  void ListBuild ::insert(int newitem)   // add item at start or inbetween
{
	//int newlngth= findlength()+1;

	
	 // creates new node structure and returns pointer to it
		 list newnode = new node ; 
		 if( newnode ==NULL)
			 cout<< " could not allocate memory";
		 else
		   {
			 sz= findlength();
			 newnode->d = newitem;
			 newnode->next=NULL;
			 if (sz==0) // allocate first node
			   {
				 head= newnode;
				 tail=head;
			   }
			 else          // allocate rest nodes
			  {
				  tail->next = newnode;
				  tail=newnode;
			  }
			 sz++;

		 }  // end of if( newnode ==NULL)
  }

  void ListBuild::findpr()const
  {
       if (sz==0)
	   cout<< "already empty list"<<endl;
	   else if(sz==1)
	     {   }  // do nothing
	   else
	   {
	     list prev = head;
	     for (int i=0;i<sz-1;i++)
		    {
                        prev= prev->next;
		    }
	   }
  }
void ListBuild ::remove()        // remove item
{
	        
	   	         --sz;     
		   	 if (sz==0)
			 cout<< "already empty list"<<endl;
			 else if (sz==1) // delete first node
			    {
				 delete tail;
                                  tail=NULL;
			    }
			 else          // delete rest nodes
			    {
			        list curr;
				curr= prev->next; // now points to node be deleted
				prev->next = curr->next;
				curr=NULL;
				delete curr;
			    }
}



void ListBuild ::print()  
{
	  list temp=NULL;
	   temp=head;  // dont want to change head pointer, so create another temp                              //pointer
	   
	   for (int i=0;i<sz;i++)
	   {
		   cout<< temp->d<<'\t';
		   temp=temp->next;
	   }
}
and the user file

Code:
#include <iostream>
#include "Link_list_build.h"
using namespace std;

int main()
{
  ListBuild a,b,c ;
  a.insert(10); // insert at start
  a.print();
  b.insert(20);  // insert at end and build list
  b.print();
  c.insert(30);  
  c.print();
}
.

the code compiles and allocates first node. but, as i pass second node data, it reaces
tail->next = newnode;
within "insert" function and gives memory access violation.
any ideas why? I do not see why it should.

I also had other question,while copying code here, how do i copy line numbers ?
thanks
sedy