簡體   English   中英

帶鏈接列表的問題-為什么不將新元素添加到我的列表中?

[英]Troubles with linked list - why aren't new elements being added to my list?

我的鏈表打印功能僅打印一個值,我不知道為什么。 一切正常。

這是我存儲在鏈表中的結構:

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);
}

怎么了

您的職能

int insertNewElementAtEndWithValue(list_element element, int value)

接受一個list_element對象,也就是說,列表頭的副本,您要傳遞的是一個指針,因此:

int insertNewElementAtEndWithValue(list_element *element, int value)

這樣您就可以將值添加到實際列表中,而不是副本中。

您需要學習使用指針,並使用調試器來檢查數據保留在哪里。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM