Ciao . . . Quello che dovresti fare è soltanto ottenere un puntatore al penultimo nodo cosí potrai sia deallocare l' ultimo nodo, sia aggiornare la lista (e va fatto in quest' ordine) . . .
codice:
 
void cancInFondo( nodo** lista )
{
nodo* newLastNode, *currNode;
if( *lista )
{
 currNode = *lista;
 if( currNode->next )
 {
  while( currNode->next )
  {
   newLastNode = currNode;
   currNode = currNode->next;
  }
  free(newLastNode->next);
  newLastNode->next = NULL;
 }
 else
 {
  free(*lista);
  *lista = NULL;
 }
}
}