+/* Public functions. */
+
+/* allocates and initialises list structure; returns NULL if malloc fails */
+struct list *list_create() {
+ struct list *list = malloc(sizeof(struct list));
+ if (list)
+ memset(list, 0, sizeof(struct list));
+ return list;
+}
+
+/* frees all memory associated with the list
+ note that the data pointed at from each node is also freed
+ use list_free() to free only the memory used by the list itself */
+void list_destroy(struct list *list) {
+ list_free_helper_(list, 1);
+}
+
+/* frees the meory used by the list itself
+ note that the data pointed at from each node is not freed
+ use list_destroy() to free all the data associated with the list */
+void list_free(struct list *list) {
+ list_free_helper_(list, 0);
+}
+