logo

Reading and writing a linked list to a file in C

#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct Node { int x; struct Node* next; } Node; void deallocate(Node** root) { Node* curr = *root; while (curr != NULL) { Node* aux = curr; curr = curr->next; free(aux); } *root = NULL; } void insert_end(Node** root, int value) { Node* new_node = malloc(sizeof(Node)); if (new_node == NULL) { exit(1); } new_node->next = NULL; new_node->x = value; if (*root == NULL) { *root = new_node; return; } Node* curr = *root; while (curr->next != NULL) { curr = curr->next; } curr->next = new_node; } void serialize(Node* root) { FILE* file = fopen("list.txt", "w"); if (file == NULL) { exit(1); } for (Node* curr = root; curr != NULL; curr = curr->next) { fprintf(file, "%d, ", curr->x); } fclose(file); } void deserialize(Node** root) { FILE* file = fopen("list.txt", "r"); if (file == NULL) { exit(2); } int val; while(fscanf(file, "%d, ", &val) > 0) { insert_end(root, val); } fclose(file); } int main(int argc, char* argv[]) { Node* root = NULL; Node* root2 = NULL; // insert_end(&root, -2); // insert_end(&root, 11); // insert_end(&root, 22); // serialize(root); deserialize(&root); for (Node* curr = root; curr != NULL; curr = curr->next) { printf("%d\n", curr->x); } deallocate(&root); // deallocate(&root2); return 0; }