Buscamos por todo internet y así traerte la solución a tu dilema, en caso de inquietudes puedes dejar la inquietud y te respondemos porque estamos para ayudarte.
Solución:
Dentro de printList
también tienes que comprobar head == NULL
de lo contrario, está accediendo a miembros de un puntero que apunta a NULL
. Lo siguiente debería funcionar.
void printList()
node *temp = head;
while(temp != NULL) // don't access ->next
cout << temp->data << endl;
temp = temp->next;
En printReverse()
Realmente no puedo entender por qué tomas la mitad de los conteos de los elementos para imprimir e imprimes dos elementos en cada iteración. Sin embargo, realmente no necesita un bucle for aquí. Simplemente puede parar tan pronto como temp == head
después de su ciclo, desde entonces solo imprimió la cabeza. Y solo imprima un elemento, aquel cuyo próximo puntero apunte al elemento previamente impreso.
Otro intento recursivo de resolver el problema se ve así:
void printReverse()
printReverseRecursive(head);
void printReverseRecursive(node *n)
if(n)
printReverseRecursive(n->next);
cout << n->data << endl;
Debería considerar volver a escribir su ciclo para comenzar en el último elemento (como lo ha hecho) y hacer que su condición de ciclo se detenga cuando llegue al head
. Tener el doble de código dentro de su for
bucle, junto con el impar count/2
La lógica ciertamente lo está confundiendo a usted (y a nosotros).
temp = [last element]
while not at head
print temp
temp = previous element
print head
Tenga en cuenta que ya tiene el código para el temp = previous element
parte:
temp2 = head;
while(temp2->next != temp)
temp2 = temp2->next;
Dado que asumo que se trata de una tarea de algún tipo, intencionalmente no le daré el código C++ para esto. Incluso si no es una tarea, trabajar con esto en mente debería ser la experiencia de aprendizaje que buscas. Sin embargo, si lo intenta y aún tiene un problema, no dude en actualizar su pregunta (o publicar una nueva).
void printReverse()
printReverse(head) //kickstart the overload function below
void printReverse(node *n)
if(n == 0) return;
printReverse(n->next); //print the next
cout << n->data << endl; //before printing me
Si entiendes que te ha resultado útil este post, agradeceríamos que lo compartas con el resto juniors y nos ayudes a difundir nuestra información.