salve, sto leggendo da un paio d'ore questo programma che mi è stato dato e non riesco proprio a capire come funzioni. provando a seguire passo passo quello che c'è scritto, a me vengono risultati completamente diversi da quelli del compilatore..Non capisco prorpio la logica che c'è dietro questo algoritmo. qualcuno mi saprebbe spiegarne il funzionamento?

codice:
list InsertCliente(element e, list l){
list l1 = NULL, root = l; 
list t; t = cons(e, l); 

if(empty(l)){ return t; } 

while(!empty(l)){ 
l1=l; 
l = tail(l); 
} 

l1->next = t; 
t->next = l;

return root; 
}