PUERTA | PUERTA CS 2010 | Pregunta 36

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

Deja una respuesta

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