fix linked list test

This commit is contained in:
Joseph Poirier 2018-01-11 23:04:24 -06:00
parent c053f13e4f
commit e96fabfe56
No known key found for this signature in database
GPG key ID: 65858A2540EBDA40

View file

@ -22,8 +22,10 @@ void enqueue_tail(int d) {
new_node->data = d; new_node->data = d;
new_node->next = tail; new_node->next = tail;
new_node->prev = NULL; new_node->prev = NULL;
if (tail != NULL) if (tail != NULL)
tail->prev = new_node; tail->prev = new_node;
tail = new_node; tail = new_node;
if (head == NULL) if (head == NULL)
head = tail; head = tail;
@ -36,12 +38,14 @@ void enqueue_tail(int d) {
void enqueue_head(int d) { void enqueue_head(int d) {
struct Node *new_node = malloc(sizeof(*new_node)); struct Node *new_node = malloc(sizeof(*new_node));
// printf("enqueue_head head: %p\n", (void*)head);
new_node->data = d; new_node->data = d;
new_node->next = NULL; new_node->next = NULL;
new_node->prev = head; new_node->prev = head;
if (head != NULL) if (head != NULL)
head->next = new_node; head->next = new_node;
head = new_node; head = new_node;
if (tail == NULL) if (tail == NULL)
tail = head; tail = head;
@ -64,7 +68,11 @@ int dequeue_tail(void) {
int d = tail->data; int d = tail->data;
if (tail->next != NULL) if (tail->next != NULL)
tail->next->prev = NULL; tail->next->prev = NULL;
tail = tail->next; tail = tail->next;
if (t == head)
head = NULL;
free(t); free(t);
return d; return d;
} }
@ -79,14 +87,19 @@ int dequeue_head(void) {
struct Node *t = head; struct Node *t = head;
int d = head->data; int d = head->data;
if (head->prev != NULL) { if (head->prev != NULL) {
head->prev->next = NULL; head->prev->next = NULL;
} }
head = head->prev; 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: %p\n", (void*)head);
// printf("B. dequeue_head head next: %p\n", (void*)((head == NULL) ? NULL : head->next)); // 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)); // printf("B. dequeue_head head prev: %p\n", (void*)((head == NULL) ? NULL : head->prev));
if (t == tail)
tail = NULL;
free(t); free(t);
return d; return d;
@ -99,6 +112,7 @@ void reverse_list(void) {
tmp1 = tail; tmp1 = tail;
tail = head; tail = head;
head = tmp1; head = tmp1;
while (tmp1 != NULL) { while (tmp1 != NULL) {
tmp2 = tmp1->next; tmp2 = tmp1->next;
tmp1->next = tmp1->prev; tmp1->next = tmp1->prev;
@ -117,7 +131,6 @@ int main(int argc, char **argv) {
for (i = 0; i < COUNT; i++) { for (i = 0; i < COUNT; i++) {
printf("dequeue tail: %d\n", dequeue_tail()); printf("dequeue tail: %d\n", dequeue_tail());
} }
for (i = 0; i < COUNT; i++) { for (i = 0; i < COUNT; i++) {
printf("enqueue head: %d\n", i); printf("enqueue head: %d\n", i);
enqueue_head(i); enqueue_head(i);
@ -125,7 +138,6 @@ int main(int argc, char **argv) {
for (i = 0; i < COUNT; i++) { for (i = 0; i < COUNT; i++) {
printf("dequeue head: %d\n", dequeue_head()); printf("dequeue head: %d\n", dequeue_head());
} }
for (i = 0; i < 10; i++) { for (i = 0; i < 10; i++) {
printf("enqueue head: %d\n", i); printf("enqueue head: %d\n", i);
enqueue_head(i); enqueue_head(i);