Как освободить элементы и контент связанного списка? - PullRequest
0 голосов
/ 08 января 2020
// Represents a single list node. The value is dynamically allocated. The node 
// is the owner of the value and has to free it when itself is released.
struct Node {
    String value; // dynamically allocated string, release memory!
    struct Node* next; // self-reference
};
typedef struct Node Node;

// Create a list node. Copies the value (into dynamically allocated storage).
Node* new_node(String value, Node* next) {
    Node* node = xcalloc(1, sizeof(Node));
    node->value = s_copy(value); // s_copy performs dynamic allocation
    node->next = next;
    return node;
}

// Prints the components of the given list.
void print_list(Node* list) {
    if (list == NULL) {
        printf("[]");
    } else {
        printf("[%s", list->value);
        for (Node* n = list->next; n != NULL; n = n->next) {
            printf(" %s", n->value);
        }
        printf("]");
    }
}

// Print list followed by a newline.
void println_list(Node* list) {
    print_list(list);
    printsln("");
}

// Free all nodes of the list, including the values it contains.
void free_list(Node* list) {

    struct node* tmp;

   while (list!= NULL)
    {
       tmp = list;
       list = list->next;
       free(tmp);
    }
}

Реализовать функцию free_list, которая выпускает список с его содержимым. Обратите внимание, что список является владельцем элементов списка (значение), и все элементы списка распределяются динамически. Таким образом, они также должны быть освобождены.

уже создал узел списка, список печати, теперь я в третьем упражнении, и мне нужно реализовать функцию free list с использованием xmallo c, но я не знаю, как освободить список с помощью xmallo c, в моих заметках нет ничего, что я могу использовать, кто-нибудь может мне помочь, пробовал, но это не работает?

...