我的 LinkedList 结构在 C 中不起作用

My LinkedList structure isn't functioning in C

我已经为此苦苦挣扎了一段时间,我似乎无法在 C 中创建有效的 LinkedList 数据结构,

这是我所有的结构:

typedef struct {
    int size;
    int *cellsI;
    int *cellsJ;
} DataInList;

typedef struct listElement{
    DataInList dataVar;
    struct listElement *next;
} LinkedListElement;

typedef struct {
    LinkedListElement*first;
    LinkedListElement*last;
} LinkedListRoot;

我有一个向链表添加数据元素的函数:

public void addDataToList(LinkedListRoot root, DataInList data) {
    LinkedListElement newElem;

    newElem.dataVar = data;
    newElem.next = NULL;

    if(root->first == NULL) {
        root->first = &newElem;
        root->last = &newElem;
    } else {
        root->last->next = &newElem;
        root->last = &newElem;
    }
}

有人能帮帮我吗?

正如评论者所说,您已经 定义了 newElem 在函数中,也在堆栈中,因此您无法将其全球化或 return永久进入它。沿着这些思路还有更多内容。我还没有测试过,但它应该给你一个想法:

typedef listData struct {
    int size;
    int *cellsI;
    int *cellsJ;
} listData_t

typedef struct listElement {
    listData_t dataVar;
    struct listElement *next;
} listElement_t;

typedef struct listRoot {
    listElement_t *first;
    listElement_t *last;
} listRoot_t;

listElement_t *
addDataToList(listRoot_t *root, listData_t *data) {

    listElement_t *newElem = malloc(sizeof(struct listElement));
    if (newElem == NULL) {
        fprintf(stderr, "Error allocating memory\n");
        exit(-1)
    }

    newElem->dataVar = data;
    newElem->next = NULL;

    if (root->first == NULL) {
        root->first = newElem;
        root->last  = newElem;
    } else {
        root->last->next = newElem;
        root->last = newElem;
    }
    return newElem;
}