Practice #4
Leçon 13 sur 14 du cours Liste doublement chaînée - Série Structures de données n°6 de Coddy.
Défi
FacileÉcrivez une fonction moveToFront qui reçoit un tableau d'entiers arr (les valeurs d'une liste doublement chaînée) et un entier value, trouve la première occurrence de value, et déplace ce nœud au début de la liste. Retournez le tableau résultant.
Si value n'est pas dans la liste, retournez le tableau inchangé.
Utilisez une liste doublement chaînée pour résoudre ce problème !
Vous devez utiliser la classe DoublyLinkedList (fournie dans doublylinkedlist.<ext> ainsi que node.<ext>) — n'utilisez pas les fonctions intégrées du langage comme l'inversion de tableaux, le découpage (slicing), le tri ou les opérations de liste de la bibliothèque standard pour calculer le résultat.
Essayez vous-même
#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;
}