дублирующие узлы одного списка в c - PullRequest
0 голосов
/ 26 августа 2018

У меня есть один список без циклического списка без стража, и я хочу продублировать каждый его узел.Например, у меня есть 7,5,12,16, и я хочу иметь: 7,7,5,5,12,12,16,16, но я не могу его создать. Ниже приведен мой код функции для дублирования узлов(остальные части программы верны).

    int duplicate_list(listT *list_head) {
    listT *current, *new_node;

    for(current = list_head; current != NULL; current = current->next,counter++) {
            new_node = (listT *)malloc(sizeof(listT));
            if(new_node == NULL) {
                printf("problem in new_node\n");
                free(new_node);
                exit(-1);
            }

            new_node->data = current->data;
            new_node->next = current;
    }
    return(1);
 }

Может ли кто-нибудь мне помочь?

1 Ответ

0 голосов
/ 26 августа 2018

Вы не вставляете дубликат new_node в список, вы просто создаете новые узлы в цикле.Рассмотрим пример ниже для справки.

    int duplicate_list(listT *list_head) {
    listT *current, *new_node;

    for(current = list_head; current != NULL; current = current->next,counter++) {
            new_node = malloc(sizeof(*new_node));
            if(new_node == NULL) {
                perror("problem in new_node");
                exit(1);
            }

            new_node->data = current->data;
            new_node->next = current->next;
            current->next = new_node;
            current = new_node;
    }
    return(1);
 }
...