scusami, la posto subito.

listap.h
codice:
#ifndef _listap_h
#define _listap_h

#include "nodo.h"
#include <iostream>
#include <stdlib.h>
#include <stdio.h>

using namespace std;

template<class tipoelem>
class listap
{
   public:
      typedef nodo<tipoelem> *posizione;
           
      listap();      
      void crealista();
      bool listavuota();
      posizione primolista();
      bool finelista(posizione);
      tipoelem leggilista(posizione);
      void scrivilista(posizione, tipoelem);
      posizione succlista(posizione);
   private:
      nodo<tipoelem> cella;
};

#endif

template<class tipoelem>
listap<tipoelem>::listap()
{
   crealista();
}

template<class tipoelem>
void listap<tipoelem>::crealista()
{
   cella.setprec(&cella);
   cella.setsuc(&cella);
   cella.setelem(0);
}

template<class tipoelem>
bool listap<tipoelem>::listavuota()
{
   return((cella.getprec() == &cella) && (cella.getsuc() == &cella));
}

template<class tipoelem>
typename listap<tipoelem>::posizione listap<tipoelem>::primolista()
{
   return(&cella);
}

template<class tipoelem>
bool listap<tipoelem>::finelista(typename listap<tipoelem>::posizione pos)
{
   return(pos->getsuc() == primolista());
}

template<class tipoelem>
tipoelem listap<tipoelem>::leggilista(typename listap<tipoelem>::posizione pos)
{
   return(pos->getelem());
}

template<class tipoelem>
void listap<tipoelem>::scrivilista(typename listap<tipoelem>::posizione pos, tipoelem elem)
{
   pos->setelem(elem);
}

template<class tipoelem>
typename listap<tipoelem>::posizione succlista(typename listap<tipoelem>::posizione pos)
{
   return(pos->getsuc());
}