diff --git a/linked-list.c b/linked-list.c index 6097910..e299191 100644 --- a/linked-list.c +++ b/linked-list.c @@ -1,4 +1,6 @@ #include +#include +#include #include "assert.h" struct list_node { @@ -20,6 +22,10 @@ int list_length(list_node_t * list) { return count; } +bool list_empty(list_node_t *list) { + return (list == NULL); +} + void list_print(list_node_t * list) { list_node_t *cur; @@ -31,14 +37,50 @@ void list_print(list_node_t * list) { printf("\n"); } +void list_add(list_node_t *list, list_node_t *item) { + list_node_t *cur; + + cur = list; + assert(cur != NULL); + while (cur->next != NULL) { + cur = cur->next; + } + + cur->next = item; +} + int main(int argc, char *argv[]) { list_node_t *emptylist = NULL; assert(list_length(emptylist) == 0); + assert(list_empty(emptylist) == true); list_print(emptylist); printf("list_length = %d\n", list_length(emptylist)); list_node_t foo = { 1, NULL }; + assert(list_length(&foo) == 1); + assert(list_empty(&foo) == false); + list_print(&foo); + printf("list_length = %d\n", list_length(&foo)); + + // append something to foo + list_node_t bar = { 2, NULL }; + list_add(&foo, &bar); + + assert(list_length(&foo) == 2); + assert(list_length(&bar) == 1); + list_print(&foo); + printf("list_length = %d\n", list_length(&foo)); + + // append more + const int howmany = 100; + for(int i = 0; i < howmany; i++) { + list_node_t *newnode = malloc(sizeof(list_node_t)); + newnode->data = i; + + list_add(&foo, newnode); + } + assert(list_length(&foo) == 2 + howmany); list_print(&foo); printf("list_length = %d\n", list_length(&foo)); }