решаемые
Проблема также может быть решена путем копирования заголовка в другую переменную после добавления новых узлов.
Более логичным решением было бы сделать, как говорится в ответе.
Я занимаюсь простой реализацией связанного списка, хотел также изучить указатели. почему мой код не добавляет узлы должным образом?
typedef struct Node{
int info;
struct Node* next;
}Node;
void createList(Node** node, int info){
*node = calloc(1, sizeof(Node));
(*node)->info = info;
(*node)->next = NULL;
}
Node* newNode(int info)
{
Node* newNode;
newNode = calloc(1, sizeof(Node));
newNode->info = info;
newNode->next = NULL;
return newNode;
}
void addNode(Node** node, int info){
int adaugat = 0;
if(*node == NULL){
createList(node, info);
adaugat = 1;
}
if(adaugat == 0)
{
Node **aux = node;
while((*aux)->next != NULL)
{
*aux = (*aux)->next;
}
(*aux)->next = newNode(info);
adaugat = 1;
}
}
void printList(Node* node){
int i = 1;
Node* aux;
aux = node;
while(aux != NULL)
{
printf("%d_[%d]--",i, aux->info );
i++;
aux = aux->next;
}
}
int main(int argc, char const *argv[])
{
Node *nod = NULL;
int key = 5;
createList(&nod, key);
addNode(&nod, 5);
addNode(&nod, 3);
addNode(&nod, 4);
addNode(&nod, 1);
printList(nod);
return 0;
}
Я попытался переключиться с помощью указателей и входов вызова функций в main (), но все, что я получил, было больше предупреждений и ошибок.
Вывод здесь из main () равен 1_[4]--2_[1]--
, когда он должен был быть
1_[5]--2_[3]--3_[4]--4_[1]--