A solução abaixo, em Python, utiliza as estruturas de fila e de pilha, com polimorfismo referente ao método para retirada de elemento da estrutura. No loop principal, os elementos da pilha e da fila são comparados para verificar se o número é um palíndromo.
class Lista:
def __init__(self): # genérico
self.vetor=[]
def adiciona(self,element): # genérico
self.vetor.append(element)
class Pilha(Lista):
def retira(self):
return self.vetor.pop() # retira o último
class Fila(Lista):
def retira(self):
return self.vetor.pop(0) # retira o primeiro
def testePalindromo(numero):
strTeste = str(numero)
nMetadeDigitos = int(len(strTeste)/2)
myStack=Pilha() # Empilha a primeira parte (left)
for numero in strTeste[:nMetadeDigitos]:
myStack.adiciona(numero)
myQueue=Fila() # Enfileira a segunda parte (right)
for numero in strTeste[-nMetadeDigitos:]:
myQueue.adiciona(numero)
# Compara a pilha com a fila
i,lEhPalindromo=1,True
while(lEhPalindromo and i <= nMetadeDigitos):
if (myStack.retira() != myQueue.retira()):
lEhPalindromo=False
else:
i += 1
return lEhPalindromo
if __name__ == '__main__':
print testePalindromo(123454321) # True
print testePalindromo( 765567) # True
print testePalindromo(1765567) # False