首页 > 解决方案 > 具有动态节点大小的 C 链表

问题描述

我试图在 C 中创建一个链表,其中每个节点都有用户在程序启动时输入的特定大小。我已经想到了一个结构:

struct ListNode{

    char * str;

    struct ListNode * next_node;

};

但是这里每个节点的大小是固定的。有任何想法吗?

提前非常感谢。

标签: clistpointersdynamiclinked-list

解决方案


看来您每次都需要更改节点持有的数据大小。您可以通过使用一个包含指向动态分配数据的指针的恒定大小节点来实现这一点。

请注意,在下面的示例中,结构大小保持为 sizeof(void*)+ sizeof(node*) 但分配给每个节点的数据大小会根据用户输入而改变。

typedef struct Dnode
{
    void* data;
    struct Dnode* next;
}Dnode;

Dnode* CreateDnode(size_t data_size_bytes)
{
    Dnode* newNode = NULL;

    newNode =  malloc(sizeof(Dnode));/*always the same*/
    if(NULL == newNode)
    {
        return NULL;
    }
    newNode->data =  malloc(data_size_bytes);/*changes by input*/
    if(NULL == newNode->data)
    {
        return NULL;
    }
    newNode->next = NULL;
    return newNode;
}

推荐阅读