【问题标题】:Question about insertion of doubly linked list in C关于在C中插入双向链表的问题
【发布时间】:2021-06-01 02:48:28
【问题描述】:

我正在尝试在 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 执行后,节点的值被更改为某个随机数。

对这个问题有什么想法吗?

【问题讨论】:

    标签: c data-structures doubly-linked-list


    【解决方案1】:

    您没有包含足够多的代码来使您的错误可重现,但是,我至少可以看到一个问题:在您第一次调用 mallocCreateLinkedListNode 中的那个)时,您传递了指针的大小当您似乎应该传递指向的对象的大小时。你想要的是:

    LinkedListNode* node = (LinkedListNode*)
        malloc(sizeof(LinkedListNode));
    

    (请注意,sizeof 参数中没有星号。)

    【讨论】:

    • 谢谢!我没有注意到这里有一个错字。似乎这个错字导致了问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    相关资源
    最近更新 更多