insert
Первый аргумент функции - это указатель на структуру. Когда вы передаете свою структуру, insert
получает адрес и создает локальный указатель на то же место. Чтобы изменить то, на что указывает фактическая структура (из main), вы должны передать двойной указатель.
Ниже приведены части, которые необходимо изменить:
void insert(struct A** L, int newVal) {
if (*L == NULL) {
*L = (struct A*) malloc(sizeof(struct A));
(*L)->val = newVal;
(*L)->next = NULL;
}
else {
struct A* p = *L;
...
...
...
}
}
int main() {
struct A* L = NULL;
insert(&L, 1);
printf("1 success\n");
...
...
...
printA(L);
return 0;
}
Другой подход заключается в том, чтобы остаться с одним указателем, но изменить возвращаемое значение от insert
до struct A*
. Вам просто нужно присвоить возвращаемое значение вашей main struct, например:
struct A *insert(struct A* L, int newVal) {
if (L == NULL) {
L = (struct A*) malloc(sizeof(struct A));
L->val = newVal;
L->next = NULL;
return L;
}
else {
...
}
return L;
}
int main() {
struct A* L = NULL;
L = insert(L, 1);
...
return 0;
}
Кроме того, ваша функция печати никуда не движется. Добавить строку p = p->next;
void printA(struct A* printed) {
struct A* p = printed;
while (p != NULL) {
printf("%d\n", p->val);
p = p->next;
}
}