Предыдущие вставки в массиве связанного списка заменяются самой последней вставкой - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь создать массив связанного списка, в котором имена хранятся в индексном местоположении, указанном хеш-значением имени.

По какой-то причине все предыдущие вставки заменяются самыми последнимивставка.

struct Node{
    char *key;
    struct Node *next;
};

struct Table{
    struct Node **entrypoint;
};
void InsertData(struct Table* table, const char *const name){

    //char dest[100];

    //strncpy(dest, name, 50);

    int hashIndex = HashVal(name);

    printf("Index Value is %d\n", hashIndex);


    struct Node *new_node;

    new_node = (struct Node* )malloc(sizeof(struct Node));
    new_node->key = (char *)malloc((strlen(name)+1)*sizeof(char));

    if(table->entrypoint[hashIndex] == 0){ 
        table->entrypoint[hashIndex] = new_node;
        strcpy(new_node->key, name);
        new_node->next = NULL;
    }

    else{
        struct Node *cursor = table->entrypoint[hashIndex];
        while(cursor->next  != NULL)
            cursor = cursor->next;

    cursor->next = new_node;
        strcpy(new_node->key, name);
        new_node->next = NULL;
    }


    //DISPLAY LIST
    //int count = 0;
    struct Node *temp;

    for(int i = 0; i < 15; i++){

        if(table->entrypoint[i] == NULL)
            printf("%d: \n", i);
        else{
            temp = table->entrypoint[i];
            printf("%d: ", i);
            printf("%s ", temp->key);
            //count = 0;

                         while(temp->next != NULL){
                printf("%s ", temp->key);
                temp = temp->next;
                count++;
            }
            //printf("No. of times ran: %d", count);
            printf("\n");
        }
    }

}

Количество созданных узлов и их положение в связанном списке работает нормально.

Но все вставки заменяются окончательной вставкой

Ожидаемый результат:

InsertData(&table, "Jeffrey Lars");
InsertData(&table, "Neal Rhine");
InsertData(&table, "Ledley King");

Table:
0: 
1: 
2: 
3: Jeffrey Lars, Ledley King
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14: Neal Rhine

Фактический результат:

InsertData(&table, "Jeffrey Lars");
InsertData(&table, "Neal Rhine");
InsertData(&table, "Ledley King");

Table:
0: 
1: 
2: 
3: Ledley King, Ledley King
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14: Ledley King

Может кто-нибудь указать, что я делаю неправильно.Спасибо

...