Leggiti questo articolo: Doubly Linked List.
Essenzialmente una lista concatenata bi-linkata è una struttura dati astratta i cui nodi, oltre al dato che desideri immaganizzare ed oltre al puntatore al prossimo nodo della lista, contentono come membro un puntatore al nodo precedente:
codice:
typedef struct node
{
struct node *next;
struct node *previous;
void *data;
} NODE;
Come vedi in questo modo quando costruisci la lista aggiungendovi un nuovo nodo questo avrà il proprio puntatore al nodo che lo precede, permettendoti cosi di ripercorrere la lista dall'ultimo al primo nodo, semplicemente utilizzando un procedimento praticamente identico a quello postato da te, una cosa del tipo:
codice:
NODE *currentPtr = tailPtr;
while( currentPtr != NULL )
{
currentPtr = currentPtr->previous;
}
Ricordandoti sempre che in questo caso il nodo precedente alla testa della lista va inizializzato a NULL.