双链表无法正常工作,C

时间:2014-09-12 17:56:34

标签: c buffer

#include <stdio.h>
#include <stdlib.h>

typedef struct list_item {
  int value;
  struct list_item *next;
  struct list_item *prev;
} list_item_t;

typedef struct single_list {
  list_item_t *head;
  list_item_t *tail;
} slist_t;

void init(slist_t *list) {
  list->head = NULL;
  list->tail = NULL;
}

void add(slist_t *list, int value) {
  list_item_t *newNode = (list_item_t *)malloc(sizeof(list_item_t));
  // Case for empty list
  if (list->head == NULL) {
      list->head = newNode;
      list->tail = newNode;
      newNode->value = value;
      newNode->prev = NULL;
      newNode->next = NULL;
  }
  // Case for nonempty list
  else {
      newNode->prev = list->tail;
      newNode->value = value;
      newNode->next = NULL;
      list->tail = newNode;
  }
}

void print(slist_t *list) {
  if (list->head == NULL) {
    printf("The list is empty\n");
    return;
  }
  list_item_t *currentNode = list->head;
  while (currentNode != NULL) {
    printf("%d ", currentNode->value);
    currentNode = currentNode->next;
  }
  printf("\n");
}

int main() {
  slist_t myList;
  init(&myList);
  add(&myList, 5);
  add(&myList, 2);
  add(&myList, 6);
  print(&myList);
}

好的,我摆脱了我的总线错误,但现在当我尝试打印我的列表时,所有打印出来的是: 1

init函数或我的add函数有问题吗?我想知道,因为我不在init函数中使用malloc,所以在每次函数调用add之后列表都会被删除?真的吗?我试过像这样分配它:     slist_t * list =(slist_t *)malloc(sizeof(slist_t)) 但它给了我一个错误。

1 个答案:

答案 0 :(得分:0)

未能将旧尾巴链接到新尾巴旁边。

// Case for nonempty list
else {
  // Add.  `list->tail->next` should be NULL before this code.  
  list->tail->next = newNode;

  newNode->prev = list->tail;
  newNode->value = value;
  newNode->next = NULL;
  list->tail = newNode;
}