// 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, в моих заметках нет ничего, что я могу использовать, кто-нибудь может мне помочь, пробовал, но это не работает?