El primer método nos dice que almacenemos los elementos en la pila y los elementos emergentes de la pila uno por uno y verifiquemos desde el elemento actual. El método 3 es en realidad el mismo, pero usa la pila del compilador. cuando se llama a una función recursiva, se almacena en la propia pila del compilador. Este método explota la misma propiedad. Es por eso que la mayoría de las funciones recursivas son convertibles en funciones iterativas usando una pila.
Entonces, enviaremos dos punteros, el primero y el último. (inicialmente head) y last se actualizarán a last.next en cada llamada recursiva y no actualizaremos la primera. eventualmente, en el elemento superior de la pila (obviamente del compilador), last apuntará al último elemento de la lista enlazada y primero apuntará al encabezado de la lista enlazada. En ese momento, compararemos el primero y el último, si no son iguales, entonces devolveremos falso a cada elemento de la pila del compilador debajo de este elemento. Pero, si son iguales, avanzaremos primero (que es una variable global y se puede actualizar desde cualquier lugar) y la función volverá. Cuando la función regrese al siguiente elemento (parte inferior de ese), primero apuntará al siguiente de la cabeza y el último apuntará al anterior desde la cola y así sucesivamente. Se vería un código simple y autoexplicativo en Java.
// x es una variable global, siempre que un elemento de la pila (llamada recursiva) sea falso,
// devolveremos falso a cada elemento más inferior.
booleano x = verdadero;
- ¿Es posible implementar algoritmos de aprendizaje automático en lenguaje ensamblador?
- ¿Cuál es una manera simple de implementar la paginación en una matriz en Javascript?
- ¿Cuáles son algunos algoritmos de flujo de red interesantes?
- ¿Qué proyectos de aprendizaje automático se ven bien en un currículum?
- ¿El algoritmo de Dios realmente funciona en el Cubo de Rubik 3x3x3?
// primero = cabeza, última = cabeza, inicialmente
boolean isPalindrome (nodo primero, nodo último)
{
// cada vez que llegue al final de la lista vinculada, devolveremos verdadero.
if (último == nulo)
volver verdadero;
// en cada llamada recursiva, no modificaremos primero, pero modificaremos el último.
x = isPalindrome (primero, último.siguiente);
// recuerde, cuando un elemento de la pila devuelve falso, devolveremos falso a cada elemento más inferior.
si (! x) devuelve falso;
// si x es verdadero, revisaremos la siguiente entrada.
booleano y = falso;
if (first.data == last.data)
{
y = verdadero;
}
// avanza primero antes de regresar del elemento actual de la pila.
primero = primero.siguiente;
volver y;
}
Gracias A2A, Lehar Bhandari.