带有链表的麻烦 - 为什么不将新元素添加到我的列表中?

时间:2013-12-05 22:19:56

标签: c

我的链表打印功能只保留一个值,我无法弄清楚原因。一切都按预期工作。

这是我存储在链表中的结构:

typedef struct list_element {
    int value;
    struct list_element *next;
} list_element;

这些是在列表上操作的功能:

list_element createNewLinkedList()
{
    list_element *myElement = (list_element *) malloc(sizeof(list_element));
    myElement->value = 0;
    myElement->next = NULL;
    return *myElement;
}

int insertNewElementAtEndWithValue(list_element element, int value)
{
    list_element *myElement = &element;
    do {
        if (myElement->next == NULL) {
            list_element *new = (list_element *)malloc(sizeof(list_element));
            new->value = value;
            new->next = NULL;
            myElement->next = new;
        } else {
            myElement = myElement->next;
        }

    } while (myElement->next != NULL);
}

int printListValues(list_element firstNode)
{
    list_element *temp = &firstNode;
    int sentinel = 1;
    while (sentinel) {
        printf(" %d,", temp->value);
        if (temp->next != NULL) {
            temp = temp->next;
        } else {
            sentinel = 0;
        }
    }
    return 0;
}

这是仅打印第一个值100:

的函数
void checkLinkedList()
{
    list_element list = createNewLinkedList();
    list.value = 100;
    for (int i = 1; i < 10; i++) {
        int value = rand();
        insertNewElementAtEndWithValue(list, value);
    }
    printListValues(list);
}

这有什么问题?

1 个答案:

答案 0 :(得分:0)

你的功能

int insertNewElementAtEndWithValue(list_element element, int value)

接受list_element对象,意思是,列表头部的副本,你要传递的是一个指针,所以:

int insertNewElementAtEndWithValue(list_element *element, int value)

这样就可以将值添加到实际列表而不是它的副本。

您需要学习使用指针,并使用调试器来检查数据的位置。