Je suis tombé sur ce problème en préparant une interview et curieux de connaître les différentes façons dont il peut être écrit. J'ai trouvé cela au http://cslibrary.stanford.edu/103/ et j'ai donné le problème tel quel.Comment créer une liste liée OneTwoThree avec un nombre minimum d'opérateurs d'affectation?
est ici un code pour construire la liste {1,2,3}
struct node* BuildOneTwoThree() {
struct node* head = NULL;
struct node* second = NULL;
struct node* third = NULL;
head = malloc(sizeof(struct node)); // allocate 3 nodes in the heap
second = malloc(sizeof(struct node));
third = malloc(sizeof(struct node));
head->data = 1; // setup first node
head->next = second; // note: pointer assignment rule
second->data = 2; // setup second node
second->next = third;
third->data = 3; // setup third link
third->next = NULL;
// At this point, the linked list referenced by "head"
// matches the list in the drawing.
return head;
}
Q: Recopiez le code avec le plus petit nombre d'affectations (=) qui construira la structure de la mémoire ci-dessus. R: Cela nécessite 3 appels à malloc(). 3 int attributions (=) pour configurer les int. 4 affectations de pointeur à la tête d'installation et les 3 champs suivants. Avec un peu d'intelligence et la connaissance du langage C, tout cela peut être fait avec 7 opérations d'affectation (=).
N'oubliez pas que ISO C90 interdit les '' littéraux composés '' comme '* first = (struct node) {1, second} ' –