Practice #4
Lección 13 de 14 del curso Lista Doblemente Enlazada - Serie de Estructuras de Datos #6 de Coddy.
Desafío
FácilEscribe una función moveToFront que recibe un arreglo de enteros arr (los valores de una lista doblemente enlazada) y un entero value, encuentra la primera ocurrencia de value y mueve ese nodo al frente de la lista. Devuelve el arreglo resultante.
Si value no está en la lista, devuelve el arreglo sin cambios.
¡Usa una lista doblemente enlazada para resolver este problema!
Debes usar la clase DoublyLinkedList (proporcionada en doublylinkedlist.<ext> junto con node.<ext>) — no uses funciones integradas del lenguaje como reverse, slicing, sort de arreglos, u operaciones de listas de la biblioteca estándar (stdlib) para calcular el resultado.
Pruébalo tú mismo
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "solution.h"
int main() {
char line1[8192];
char line2[64];
if (!fgets(line1, sizeof(line1), stdin)) line1[0] = '\0';
if (!fgets(line2, sizeof(line2), stdin)) line2[0] = '\0';
int arr[4096];
int len = 0;
char* tok = strtok(line1, " \t\r\n");
while (tok) { arr[len++] = atoi(tok); tok = strtok(NULL, " \t\r\n"); }
int n = atoi(line2);
int rs = 0;
int* r = moveToFront(arr, len, n, &rs);
for (int idx = 0; idx < rs; idx++) {
if (idx > 0) printf(" ");
printf("%d", r[idx]);
}
printf("\n");
return 0;
}