C中的链接列表

时间:2017-09-24 17:21:17

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

我在c中练习链表,我想用rand在节点中存储字符,但是最后一个字母在列表中重复,有人能看到会发生什么吗?

使用此函数填充节点:

 bx ic run -m 512 --name container1--volume ibmodmdcvol:/opt/ibmsoftware registry.eu-gb.bluemix.net/bluemix_images/ibmodmdc:v1 v1 bash -c "tail -f /dev/null"

这是函数agregarNodo:

nodo* nodoListas(nodo*Lista){
    int i;
    char *elemento, caracter;
    srand (time(NULL));
    for (i = 0; i< CANT_NODOS; i++){
        caracter = /*(char*)*/(65 +rand()% 25);
        elemento = &caracter;
        Lista = agregarNodo (Lista, elemento);
    }
}

这是我正在做的代码:

nodo* agregarNodo (nodo* Lista, char* elemento){
    nodo* nuevoNodo, *aux;
    nuevoNodo = (nodo*) malloc (sizeof(nodo));
    nuevoNodo -> elemento = elemento;
    nuevoNodo -> siguiente = NULL;
    if(Lista == NULL){
        Lista = nuevoNodo;
    }
    else{
        aux = Lista; //para no perder el elemento
        while(aux->siguiente != NULL){
                aux = aux -> siguiente;             
            }
        aux-> siguiente = nuevoNodo;
    }
    return Lista;
}

2 个答案:

答案 0 :(得分:1)

当你这样做时:

caracter = /*(char*)*/(65 +rand()% 25);
elemento = &caracter;

您正在将新的随机值写入声明为caracter的内存空间中,然后将指针(elemento)放入此内存空间。 但是你总是在所有的for循环中使用相同的内存空间。 所以你总是在同一个地方写作并指向同一个地方,只是更新它的值,因此重复最后一个字符值。

答案 1 :(得分:0)

你总是在代码中指向相同的内存

=CustomConcatenate(C1:W2)

你可以使用

caracter = /*(char*)*/(65 +rand()% 25);
elemento = &caracter;

顺便说一句你应该在这里使用数组