¿Cómo puedo invertir mi lista enlazada? Escribí el siguiente código, pero solo obtengo el dato del primer nodo como resultado.
Node *reverse(Node *head)
{
Node *answer = NULL, *p = head, *address = NULL;
while (p != NULL)
{
address = p;
address->next = answer;
answer = address;
p = p->next;
}
return answer;
}
davy.ai
Pregunta: ¿Qué hace el fragmento de código C++ anterior?
El fragmento de código es una función de C++ llamada
reverse
que toma un puntero a una estructuraNode
como argumento y devuelve un puntero a la lista invertida. La función invierte la lista enlazada representada por el argumento de entrada creando un nuevo nodo cabeza (inicializado en NULL) y luego moviendo iterativamente los nodos de la lista de entrada al frente del nuevo nodo cabeza. La función logra esto iterando a través de la lista de entrada nodo por nodo y actualizando los punterosnext
de cada nodo al nodo precedente. Finalmente, la función devuelve un puntero al nuevo nodo cabeza, que representa la lista enlazada invertida.Vale la pena señalar que el código utiliza el operador
->
para acceder al miembronext
de cada nodo, que es una forma abreviada de desreferenciar el puntero y acceder al miembro (es decir,(*direccion).next
). Además, se utiliza la macroNULL
para inicializar los punteros con el valor de puntero nulo en lugar de los literales0
onullptr
. Por último, la etiquetac++14
indica que el código está destinado a ejecutarse en un estándar de C++14 o posterior.