функция добавления данных в конец связанного списка - PullRequest
0 голосов
/ 23 апреля 2019

это мой первый пост здесь, чтобы возобновить, у меня проблема с функцией, которая добавляет данные в конец моего списка .. это мой код: (в коде есть некоторые rq) спасибо

typedef struct noeud {
    char c;
    struct noeud * next;
} Noeud;

typedef Noeud * car;

//for crt a dat in the last of the list
car addInLast(car T, char x) {
    car temp = malloc(sizeof(Noeud));
    car dat = malloc(sizeof(Noeud));
    temp = T;
    while (temp) {
        temp = temp - > next;
    }
    dat - > c = x;
    dat - > next = NULL;
    temp = dat;
    return T;
}
// crt in the frst
car addInFirst(car T, char x) {
    car temp;
    temp = malloc(sizeof(Noeud));
    temp - > c = x;
    temp - > next = T;
    T = temp;
    return T;
}

ничего не добавилось и длина все та же .. в чем проблема, пожалуйста?
Большое спасибо за ваше участие

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

Добро пожаловать в переполнение стека.Функция addInLast имеет некоторые недостатки.Рассмотрим этот цикл:

while (temp) {
    temp = temp - > next;
}

Это будет продолжаться до тех пор, пока temp не станет нулевым, и у него больше не будет подключения к списку.Затем функция помещает новые данные в новую структуру и возвращает указатель на исходный список. Ничего не было добавлено в список.

Что-то вроде этого может быть лучше:

while (temp->next) {
    temp = temp->next;
}

Есть другие проблемы, и вы все равно должны быть осторожны с необычными случаяминапример, добавление элемента в пустой список, но этого должно быть достаточно для начала.

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

0 голосов
/ 23 апреля 2019

В коде addInLast есть некоторые проблемы, ниже приведена функция с исправленными проблемами, и я добавил комментарии для объяснения проблем

car addInLast(car T, char x) {
    car temp = NULL; // No Need to allocate new space for this pointer, we use 
                    // this pointer to traverse to end of list
    car dat = malloc(sizeof(Noeud));
    dat - > c = x;
    dat - > next = NULL;
    temp = T;

    if(temp == NULL){ // If the list is empty first node will be the node you 
                     // created
        T = dat;
        return T;
    }

    while (temp->next != NULL){ // This condition makes sure you reach the last 
                                // element of the list because for last elemt 
                                // next value is NULL
        temp = temp - > next;
    } 
    temp->next = dat;
    return T;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...