链表有关问题

链表问题
//linklist.h
#include <iostream.h>
#include <stdlib.h>
template <class   type> class   linklist;
template <class   type> class   node
{
friend   class   linklist <type> ;
private:
    node <type> *next;
public:
    type   data;
    node(node <type> *pnext=NUll);//构造函数,用于构造头结点
    node(const   type&item,node <type> *pnext=NULL);//构造函数,用于构造非头结点
    void   setnext(node <type> *p){next=p;}
    void   setdata(const   type&x){data=x;}
    ~node();
};
template <class   type> class   linklist
{
private:
    node <type> *head;
    node <type> *pcurrent;
public:
    linklist();
    ~linklist();
    int   length()const;
    type   getCurrent()const;
    node <type> *locate(type&x);
    void   insterBefore(const   type&x);
    void   insterAfter(const   type&x);
    type   deleteCurrent();
    int   isempty()const;
    void   clear();
    node <type> *reset(int   i);//使第i个结点成为当前结点
    node <type> *next();//使当前结点指针指向下一个节点
    int   endofList()const;
    void   freeList();
};

//linklist.cpp
#include "linklist.h "
template <class   type> node <type> ::node(node <type> *pnext)
{
next=pnext;
}
template <class   type> node <type> ::node(const   type&item,node <type> *pnext)
{
data=item;
next=pnext;
}
template <class   type> linklist <type> ::linklist()
{
head=pcurrent=new   node <type> ();
head-> next=NULL;
}
template <class   type> linklist <type> ::~linklist()
{
}
template <class   type> void   linklist <type> ::freeList()
{
clear();
delete   head;
}
template <class   type> int   linklist <type> ::length()const
{
node <type> *p=head-> next;
int   len=0;
while(p!=NULL)
{
    len++;
    p=p-> next;
}
return   len;
}
template <class   type> type   linklist <type> ::getCurrent()const
{
if   (pcurrent==head||pcurrent==NULL)
{
    cerr < < "未取到数据值 " < <endl;
    exit(1);
}
return   pcurrent-> data;
}
template <class   type> node <type> *linklist <type> ::locate(type&x)
{
pcurren=head-> next;
while(pcurrent!=NULL)
{
    if(pcurrent-> data==x)
      break;
    else
      pcurrent=pcurrent-> next;
}
return   pcurrent;
}
template <class   type> void   linklist <type> ::insterBefore(const   type&x)
{
if(head-> next==NULL)
{
    node <type> *newnode=new   node <type> (x,NULL);
    head-> next=pcurrent=newnode;
}
else
{
    node <type> *newnode=new   node <type> (x,pcurrent);
    node <type> *p=head;
    while(p-> next!=pcurrent)p=p-> next;