Codice PHP:
#include <iostream>
#include <cstdlib>
#include "ListaPtr.h"

using namespace std;
//Il costruttore mi crea semplicemente la lista con puntatore
ListaPtr::ListaPtr() {
    
creaLista();
}
//Distruttore che elimina tutti gli elementi della lista
ListaPtr::~ListaPtr() {
    
distruggiLista();
}
//Creando la lista Imposto il puntatore Null
void ListaPtr::creaLista()
{
     
primo=NULL;
}
//Metodo per eliminare tutti gli elementi della lista
void ListaPtr::distruggiLista()
{
     
posizione tmp;
     
tmp=primo;
     while(
tmp!=NULL)
     {
                     
cancLista(tmp);
                     
tmp=primo;
     }
}
//Metodo che mi controlla se la lista è vuota cioè se il puntatore punta a Null
bool ListaPtr::listaVuota()
{
     return (
primo==NULL);
}
//Metodo per leggere un elemento della lista
elementoLista ListaPtr::leggiLista(posizione p)
{
              if(!
fineLista(p))
                  return 
p->getEtichetta();
}
//Metodo per scrivere un elemento all'interno di una lista
void ListaPtr::scriviLista(elementoLista e,posizione p)
{
     if(!
fineLista(p))
         
p->setEtichetta(e);
}
//Metodo che mi restituisce il primo elemento della lista
posizione ListaPtr::primoLista()
{
          return(
primo);
}
//Metodo boolean che mi dice se la lista è finita
bool ListaPtr::fineLista(posizione p)
{
     return(
p==NULL);
     
}
//Metodo che mi ritorna l'elemento successivo della lista
posizione ListaPtr::succLista(posizione p)
{
          if(!
fineLista(p))
              return (
p->getSuccessivo());
          else
              return (
NULL);
}     
//Metodo che mi ritorna l'elemento precedente della lista
posizione ListaPtr::predLista(posizione p)
{
          if(
p==primo)
              return (
NULL);
          else
          {
              
posizione tmp;
              
tmp=primo;
              while (
tmp->getSuccessivo()!=p)
                    
tmp=tmp->getSuccessivo();
              return(
tmp);
          }
}           
//Metodo che inserisce un elemento all'interno della lista
void ListaPtr::insLista(elementoLista e,posizione p)
{
     
posizione tmp;
     
tmp=new NodoLista(e,p);
     if(
p==primo)
         
primo=tmp;
     else
         
predLista(p)->setSuccessivo(tmp);
}
//Metodo che cancella un elemento all'interno della lista
void ListaPtr::cancLista(posizione p)
{
     if((!
listaVuota()) && (p!=NULL))
     {
                        if(
p==primo)
                        {
                                    
primo=p->getSuccessivo();
                                    
delete(p);
                        }else {
                              
predLista(p)->setSuccessivo(p->getSuccessivo());
                              
delete(p);
                        }
     }
}
//Metodo che mi restituisce l'ultimo elemento della lista
posizione ListaPtr::ultimoLista()
{
          
posizione tmp;
          
tmp=primo;
          while (
tmp->getSuccessivo() != NULL)
                
tmp=tmp->getSuccessivo();
          return (
tmp);