Correr em Lista Ordenada

Pessoal eu criei uma lista de quatro elementos. Então fiz o seguinte coloquei tres nos. Na seguinte estrutura do ultimo para o inicio. Fiz o seguinte codigo:

public void ordena(){
     No tmp1,tmp2,tmp3;
     
     tmp1 = null;
     tmp2 = null;
     tmp3 = null;
     tmp1 = primeiro;
     
     while(tmp1.getProx()!=null){
     	tmp1 = tmp1.getProx();
     	while(tmp2.getProx()!=tmp1){
     		tmp2 = tmp2.getProx();
     		while(tmp3.getProx()!=tmp2){
     			tmp3 = tmp3.getProx();
     		}
     	}
     		
   	 }
   }

Minha duvida fica se ela corre certo… Então fiz de outro jeito.

public void ordena(){
     No tmp1,tmp2,tmp3;
     
     tmp1 = null;
     tmp2 = null;
     tmp3 = null;
     tmp1 = primeiro;
     
     while(tmp1.getProx()!=null){
     	tmp1 = tmp1.getProx();
     	while(tmp2.getProx()!=tmp1){
     		tmp2 = tmp2.getProx();
                                tmp2.setProx(tmp1);
     		while(tmp3.getProx()!=tmp2){
     			tmp3 = tmp3.getProx();
                                                tmp3.setProx(tmp2);
     		}
     	}
     		
   	 }
   }

Aqui eu fiquei mas seguro de dar uma resposta certa… Mas vem a duvida… como farei para chegar do final ate o inicio??
Alguem tem uma ideia?
grato.

Pessoal agora eu entendi como funciona a lista mas para piorar tenho que fazer a lista correr do ultimo para o primeiro… Só que o meu codigo não imprime os numeros… porque será?