/* http://www.cs.nyu.edu/courses/summer07/G22.2110-001/hw05-c-example.txt * Rename this file into 'lists.c'. * WARNING: This code intentionally contains a bug for education purposes! */ #include #include #include struct ListCell { int data; struct ListCell* next; }; struct List { struct ListCell* head; }; struct List* listCreate() { struct List* result = (struct List*)malloc(sizeof(struct List)); result->head = NULL; return result; } void listDestroy(struct List* list) { struct ListCell* i = list->head; while (NULL != i) { struct ListCell* c = i; i = i->next; free(c); } free(list); }; void listEnqueue(struct List* list, int data) { struct ListCell* c = (struct ListCell*)malloc(sizeof(struct ListCell)); c->data = data; c->next = list->head; list->head = c; }; int listDequeue(struct List* list) { struct ListCell *h = NULL, *i = list->head; assert(NULL != i); while (NULL != i->next) { h = i; i = i->next; } int result = i->data; free(i); if (NULL != h) h->next = NULL; return result; } int main(int argc, char** argv) { struct List* l = listCreate(); listEnqueue(l, 3); listEnqueue(l, 5); printf("%d\n", listDequeue(l)); printf("%d\n", listDequeue(l)); listDestroy(l); return 0; }