rmendes08:
public static Lista ordemCres(Lista lista){
if (lista == null)
return null;
else{
Lista cauda = lista.cauda();
if( cauda != null && lista.cabeça() <= lista.cabeça()){
return lista.cauda();
}
else
return ordemCres(lista.cauda());
}
}
Há 2 problemas com seu código:
1) Você cria uma variável cauda e não a reusa nas linhas 8 e 11;
2) comparação redundante na linha 7:
lista.cabeça() <= lista.cabeça()
Ou seja, com essas modificações e seguindo a lógica da versão inicial, ele poderia ficar assim:
public static Lista ordemCres(Lista lista) {
if (lista == null) {
return null;
}
Lista cauda = lista.cauda();
if (cauda != null && lista.cabeça() <= cauda.cabeça()) {
return cauda;
}
return ordemCres(cauda);
}
E,
fra, tudo o que esse método faz é percorrer a lista até achar uma cauda maior ou igual a cabeça ou nula e retorná-la. Pelo nome, imagino que você queria ordená-la.
Mais uma coisa. Estudo os padrões java:
Use "Programa" e não "programa" para nome de classe;
Não use "ç", coloque "cabeca" mesmo.
Por fim, parabéns pela iniciativa de tentar fazer o exercício sozinho, ao contrário de muitos que entram aqui pra pedir tudo de mão beijada.
dica: Depois de fazer sua própria estrutura da lista encadeada, dê uma olhada no código da LinkedList do java, que é uma lista circular duplamente encadeada.