C中插入双向链表的问题
Question about insertion of doubly linked list in C
我正在尝试在 C 中实现双向链表,运行 解决一些关于头部插入的问题。
LinkedListNode* CreateLinkedListNode(int data) {
LinkedListNode* node = (LinkedListNode*) malloc(sizeof(LinkedListNode*));
if (node == NULL) {
printf("Fail to create a linked list node");
exit(1);
}
node->prev = NULL;
node->next = NULL;
node->data = data;
return node;
}
void InsertLinkedList(LinkedListPtr list, int new_value) {
LinkedListNode* node = CreateLinkedListNode(new_value);
node->next = list->head;
if (list->head != NULL) {
printf("%d\n", node->data);
list->head->prev = node;
printf("%d\n", node->data);
}
if (isEmpty(list)) {
list->tail = node;
}
list->head = node;
list->num_elements++;
}
执行InsertLinkedList()中的list->head->prev = node
后,节点的值被更改为某个随机数。
关于这个问题有什么想法吗?
您没有包含足够的代码来重现您的错误,但是,我至少可以看到一个问题:在您第一次调用 malloc
(CreateLinkedListNode
中的那个)时,您当您似乎应该传递指向的对象的大小时传递指针的大小。你想要的是:
LinkedListNode* node = (LinkedListNode*)
malloc(sizeof(LinkedListNode));
(注意 sizeof
参数中没有星号。)
我正在尝试在 C 中实现双向链表,运行 解决一些关于头部插入的问题。
LinkedListNode* CreateLinkedListNode(int data) {
LinkedListNode* node = (LinkedListNode*) malloc(sizeof(LinkedListNode*));
if (node == NULL) {
printf("Fail to create a linked list node");
exit(1);
}
node->prev = NULL;
node->next = NULL;
node->data = data;
return node;
}
void InsertLinkedList(LinkedListPtr list, int new_value) {
LinkedListNode* node = CreateLinkedListNode(new_value);
node->next = list->head;
if (list->head != NULL) {
printf("%d\n", node->data);
list->head->prev = node;
printf("%d\n", node->data);
}
if (isEmpty(list)) {
list->tail = node;
}
list->head = node;
list->num_elements++;
}
执行InsertLinkedList()中的list->head->prev = node
后,节点的值被更改为某个随机数。
关于这个问题有什么想法吗?
您没有包含足够的代码来重现您的错误,但是,我至少可以看到一个问题:在您第一次调用 malloc
(CreateLinkedListNode
中的那个)时,您当您似乎应该传递指向的对象的大小时传递指针的大小。你想要的是:
LinkedListNode* node = (LinkedListNode*)
malloc(sizeof(LinkedListNode));
(注意 sizeof
参数中没有星号。)