/*lista-doppia.h*/

// Ogni nodo possiede un puntatore all'elemento successivo
// e uno all'elemento precedente.
struct nodo {
nodo *precedente;
int n;
nodo *prossimo;
};

// Si noti che non viene dichiarato un tipo lista:
// la lista e' identificata da un puntatore a un nodo (la sentinella).


// Inizializzazione della lista, da chiamare obbligatoriamente
// dopo la dichiarazione di una lista concatenata
void inizializza (nodo *&L);

// Inserimento nella posizione precedente quella indicata da p
void inserisci_dopo (nodo *&L, nodo *p, int n);

// Ricerca di un intero nella lista. Restituisce il puntatore al nodo che lo
// contiene, oppure alla sentinella se non e' presente il valore cercato
nodo *cerca (nodo *&L, int n);

// Inserimento di un intero in una lista ordinata
void inserisci_ordinato (nodo *&L, int n);

// Cancellazione dell'elemento cui punta p
void cancella (nodo *&L, nodo *p);

// Stampa il contenuto della lista
void stampa (nodo *&L);