Witam serdecznie,
Mam sobie taką listę (strukturę), która działa jako globalna (przynajmniej taki był mój cel):
struct element {
int data;
struct element *next;
} list;
struct element *ptr = &list;
Funkcja, która pozwala umieszczać na liście różne liczby wygląda tak:
int insert(struct element **begin, int x) {
struct element *ntr;
ntr = (struct element *)malloc(sizeof(struct element));
if (!ntr) {
printf("Memory allocation failure!\n");
return 0;
}
ntr->data = x;
ntr->next = *begin;
*begin = ntr;
return 1;
}
Czyli każdy kolejny element umieszczany jest na górze listy. I teraz 2 problemy:
- Dodałem 3 liczby. Kiedy je wypisuje rekurencyjnie na końcu zawsze pojawia się też 0. Z czego to wynika?
- Zrobiłem funkcję, która ma za zadanie usuwać z listy pozycję z daną liczbą. Czyli przykładowo remove(6) ma usunąć pozycję z 6 i przesunąć wszystkie kolejne o jeden od tyłu (żeby nie było przerw). Wygląda to tak:
int remove(int x) {
int i = 0;
while(ptr) {
if(ptr->data == x) {
i = 1;
}
if (i == 1) {
ptr->data = ptr->next->data;
}
ptr = ptr->next;
}
if (i == 1)
return 1;
return 0;
}
Problem w tym, że program się kompiluje, ale potem nagle wywala. Błąd jest w tej linii:
ptr->data = ptr->next->data;
Co robię źle?