双链表工作不正常,C
好的,我消除了总线错误,但现在当我尝试打印我的列表时,它打印出来的是: 一, 问题出在init函数还是我的add函数中?我想知道,既然我在init函数中没有使用malloc,那么在每次调用add函数之后,列表是否会被删除?这是真的吗?我尝试过这样分配: slist\u t*list=slist\u t*mallocsizeofslist\t双链表工作不正常,C,c,buffer,C,Buffer,好的,我消除了总线错误,但现在当我尝试打印我的列表时,它打印出来的是: 一, 问题出在init函数还是我的add函数中?我想知道,既然我在init函数中没有使用malloc,那么在每次调用add函数之后,列表是否会被删除?这是真的吗?我尝试过这样分配: slist\u t*list=slist\u t*mallocsizeofslist\t 但它给了我一个错误。无法将旧尾巴的旁边链接到新尾巴 #include <stdio.h> #include <stdlib.h>
但它给了我一个错误。无法将旧尾巴的旁边链接到新尾巴
#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);
}
首先,您永远不会更改list->tail以指向新的tail…您应该再次检查您的init函数。您的list的tail被初始化为NULL并取消引用。init从不使用其参数…使用所有警告和调试信息进行编译,例如gcc-Wall-g,然后使用调试器gdb
// 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;
}