Saltar al contenido

Imprimiendo mi lista enlazada en orden inverso en C++

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 printListtambién tienes que comprobar head == NULLde 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *