Inverter pilha com recursao

Ei galera estou com dúvida de como inverter uma pilha sem usar uma pilha auxiliar. Cheguei a conclusão de que isso tem que ser feito com recursão mas aunda não consegui enxergar qual a resposta, gostaria que vocês podessem me ajudar.

Grato.

public void inverterPilha(Pilha pilha){ ElementoDaPilha elementoDaPilha=pilha.pop(); if(!pilha.isVazia()){ inverterPilha(pilha); } pilha.push(elementoDaPilha); }

Obs: deve ser fornecida uma pilha nao vazia ao método.
Obs2: repara que vc está usando implicitamente uma pilha, que é a pilha de execução.

Olá de principio eu pensei isso mas preste atenção, quando eu chamar recursivamente o método inverterPilha() ele vai botar todos os elementos da pilha em ordem inversa, certo? quando eu mandar ele re-empilhar os elementos ele retornarão para o estado normal, veja só.

pilha original       pilha recursao         re-empilhar
     4                   1                    4
     3                   2                    3
     2                   3                    2
     1                   4                    1

veja apilha ficou igual a original, me corrija se eu estiver errado.
Grato.

É verdade, dei muito mole msm…hehe

Que eu saiba você precisa de no mínimo duas pilhas, a fonte e o destino, para fazer isso.

public Pilha inverterPilha(Pilha org, Pilha dest){
if(dest == null) dest = new Pilha();
if(org.isEmpty())
return dest;
dest.push(org.pop);
return inverterPilha(org,dest);
}

Dai é só passar a pilha original e null ou new Pilha no segundo parametro.

Boa solução, mas eu tava tentando ver se conseguia fazer sem pilha auxiliar agora, só pelo desafio…hehe

Com apenas um eu consigo fazer com uma LinkedList… mas com uma Stack não.

essa solução do mark_ameba esta muito boa, mas estou realmente intrigado em fazer só com uma pilha, Bruno laturner, antes de eu postar essa dúvida eu tin ha perguntado para o meu porfessor se isso era possivel e ele me afirmou que pode ser feito com recursão sem usar uma pilha auxiliar.

ainda estou tentando aqui xD