es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error lógico en el código de la lista enlazada simple en C++.

Para el siguiente código, el resultado que estoy buscando es 4->5->, sin embargo, el resultado que se muestra es solo 4->.

Para contexto, estoy tratando de implementar una lista enlazada simple utilizando estructuras y funciones en c++.

Código:

#include <iostream>

using namespace std;
struct node
{
    int data;
    node* next;
};
node* head = NULL;
void insert(int val)
{
node* n = new node();
n->data = val;

if(head == NULL)
{
    head = n;
}
else
{
    node* temp = head;
    while(temp!=NULL)
    {
        temp = temp->next;
    }
    temp = n;
}
}

void display()
{
    if(head == NULL)
    {
        cout<<"¡DESBORDAMIENTO! ¡LA LISTA ENLAZADA ESTÁ VACÍA!"<<endl; }="" else="" {="" cout<<"¡lista=""></endl;><endl; node*="" temp="head;" while(temp!="NULL)" {=""></endl;><temp->data<<"->";
            temp = temp->next;
        }
        cout<<endl;
    }
}

int main()
{
    insert(4);
    insert(5);
    display();
    return 0;
}

}=”” }=”” int=”” main()=”” {=”” insert(4);=”” insert(5);=”” display();=”” return=”” 0;=”” }=”” “`=””></endl;
}
}

int main()
{
insert(4);
insert(5);
display();
return 0;
}
“`

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    La razón por la cual la salida es solo 4-> y no 4->5-> es porque en la función insert(), cuando ya hay un nodo en la lista enlazada, se utiliza el siguiente código:

    node* temp = head;
    while(temp!=NULL)
    {
        temp = temp->next;
    }
    temp = n;
    

    Este código está diseñado para recorrer la lista enlazada hasta que temp apunte al último nodo (es decir, temp->next sea NULL), y luego agregar el nuevo nodo n al final de la lista enlazada estableciendo temp->next como n. Sin embargo, en este caso, el código en realidad recorre la lista enlazada hasta que temp apunta a NULL, y luego establece temp para que apunte a n, lo cual no hace nada.

    Para solucionar esto, el código debe modificarse de la siguiente manera:

    node* temp = head;
    while(temp->next!=NULL)
    {
        temp = temp->next;
    }
    temp->next = n;
    

    Este código recorrerá la lista enlazada hasta que temp apunte al último nodo (es decir, temp->next sea NULL), y luego establecerá temp->next como n para agregar el nuevo nodo al final de la lista enlazada. Con este cambio, la salida del programa será 4->5-> como se esperaba.

Comments are closed.