From e96fabfe56085bbe2471ceaf671f7a6aa3131d8c Mon Sep 17 00:00:00 2001 From: Joseph Poirier Date: Thu, 11 Jan 2018 23:04:24 -0600 Subject: [PATCH] fix linked list test --- tests/jpoirier/00_linked_list.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/tests/jpoirier/00_linked_list.c b/tests/jpoirier/00_linked_list.c index a1ead0b..cb7f7fa 100644 --- a/tests/jpoirier/00_linked_list.c +++ b/tests/jpoirier/00_linked_list.c @@ -22,8 +22,10 @@ void enqueue_tail(int d) { new_node->data = d; new_node->next = tail; new_node->prev = NULL; + if (tail != NULL) tail->prev = new_node; + tail = new_node; if (head == NULL) head = tail; @@ -36,12 +38,14 @@ void enqueue_tail(int d) { void enqueue_head(int d) { struct Node *new_node = malloc(sizeof(*new_node)); - +// printf("enqueue_head head: %p\n", (void*)head); new_node->data = d; new_node->next = NULL; new_node->prev = head; + if (head != NULL) head->next = new_node; + head = new_node; if (tail == NULL) tail = head; @@ -64,7 +68,11 @@ int dequeue_tail(void) { int d = tail->data; if (tail->next != NULL) tail->next->prev = NULL; + tail = tail->next; + if (t == head) + head = NULL; + free(t); return d; } @@ -79,14 +87,19 @@ int dequeue_head(void) { struct Node *t = head; int d = head->data; + if (head->prev != NULL) { head->prev->next = NULL; } + head = head->prev; +// printf("B. dequeue_head t: %p\n", (void*)t); // printf("B. dequeue_head head: %p\n", (void*)head); // printf("B. dequeue_head head next: %p\n", (void*)((head == NULL) ? NULL : head->next)); // printf("B. dequeue_head head prev: %p\n", (void*)((head == NULL) ? NULL : head->prev)); + if (t == tail) + tail = NULL; free(t); return d; @@ -99,6 +112,7 @@ void reverse_list(void) { tmp1 = tail; tail = head; head = tmp1; + while (tmp1 != NULL) { tmp2 = tmp1->next; tmp1->next = tmp1->prev; @@ -117,7 +131,6 @@ int main(int argc, char **argv) { for (i = 0; i < COUNT; i++) { printf("dequeue tail: %d\n", dequeue_tail()); } - for (i = 0; i < COUNT; i++) { printf("enqueue head: %d\n", i); enqueue_head(i); @@ -125,7 +138,6 @@ int main(int argc, char **argv) { for (i = 0; i < COUNT; i++) { printf("dequeue head: %d\n", dequeue_head()); } - for (i = 0; i < 10; i++) { printf("enqueue head: %d\n", i); enqueue_head(i);