Genere una lista de un solo enlace en orden inverso
Genere una lista de un solo enlace a partir de la tarea anterior Generar una lista de un solo enlace en orden inverso.
Escribe dos soluciones: utilizando un bucle y utilizando recursividad.
Usando recursividad
La lógica recursiva es un poco complicada aquí.
Primero necesitamos generar el resto de la lista y entonces generar la lista actual:
let list = { value: 1, next: { value: 2, next: { value: 3, next: { value: 4, next: null } } } }; function printReverseList(list) { if (list.next) { printReverseList(list.next); } alert(list.value); } printReverseList(list);
Usando un bucle
La variante con bucle también es un poco más complicada que la salida directa.
No hay manera de obtener el último valor en nuestra list
. Tampoco podemos ir “hacia atrás”.
Entonces, lo que podemos hacer primero es recorrer los elementos en el orden directo guardándolos en un array, y entonces generar los elementos guardados en el orden inverso:
let list = { value: 1, next: { value: 2, next: { value: 3, next: { value: 4, next: null } } } }; function printReverseList(list) { let arr = []; let tmp = list; while (tmp) { arr.push(tmp.value); tmp = tmp.next; } for (let i = arr.length - 1; i >= 0; i--) { alert( arr[i] ); } } printReverseList(list);
Ten en cuenta que la solución recursiva en realidad hace exactamente lo mismo: recorre la lista, guarda los elementos en la cadena de llamadas anidadas (en la pila de contexto de ejecución), y luego los genera.