codice:
p->prev=(&p->info);
&(p->info) è un puntatore a int, p->prev un puntatore a elemento

Non fare tutto nel main, dividi il problema in sottoproblemi, usa le funzioni.
Il modo mogliore è di creare un elemento simbolico, la sentinella che è un elemento che non va mai letto, saiq aundo fermarti a leggere la lista quando incontri la sentinella:
codice:
elemento *p;
p=(struct elemento*)malloc(sizeof(struct elemento));
p->prev=p;
p->next=p;
Questa è una lista bidirezionale con sentinella.