La siguiente función de C toma una lista de enlace simple como argumento de entrada. Modifica la lista moviendo el último elemento al frente de la lista y devuelve la lista modificada. Una parte del código se deja en blanco.
typedef struct node { int value; struct node *next; }Node; Node *move_to_front(Node *head) { Node *p, *q; if ((head == NULL: || (head->next == NULL)) return head; q = NULL; p = head; while (p-> next !=NULL) { q = p; p = p->next; } _______________________________ return head; }
Elija la alternativa correcta para reemplazar la línea en blanco.
(A) q = NULO; p->siguiente = cabeza; cabeza = p;
(B) q->siguiente = NULL; cabeza = p; p->siguiente = cabeza;
(C) cabeza = p; p->siguiente = q; q->siguiente = NULL;
(D) q->siguiente = NULL; p->siguiente = cabeza; cabeza = p;
Respuesta: (D)
Explicación: cuando finaliza el ciclo while, q contiene la dirección del penúltimo Node yp contiene la dirección del último Node. Así que tenemos que hacer lo siguiente después del bucle while.
i) Establecer el siguiente de q como NULL (q->next = NULL).
ii) Establecer siguiente de p como cabeza (p->siguiente = cabeza).
iii) Hacer cabeza como p ( cabeza = p)
El paso (ii) debe realizarse antes del paso (iii). Si cambiamos la cabeza primero, perdemos la pista del Node principal en la lista enlazada original.
Consulte https://www.geeksforgeeks.org/move-last-element-to-front-of-a-given-linked-list/ para obtener más detalles.
Cuestionario de esta pregunta
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA