Cześć,
Mam problem z dodawaniem elementów do listy jednokierunkowej. Czy moglibyście spojrzeć na kod tych funkcji i spojrzeć co jest źle? Bo ja patrze od godziny i nie umiej do tego dojść.
Problem polega na tym, że wskaźnik na głowę listy przesuwa się z jakiegoś powodu na jej koniec. Próbowałem dodać wskaźnik na poprzedni element, ale niestety on wynosi NULL. Podejrzewam, że problem tkwi w funkcji listaPush albo w błędnym zarządzaniu elementami listy w pętli wczytującej dane z pliku.
Poniżej podrzucam kod:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct slowa {
char *slowoPrzed;
char *slowoPo;
struct slowa *nast;
} Wezel;
Wezel *utworzWezel() {
Wezel *nowy = (Wezel*)malloc(sizeof(Wezel));
nowy->slowoPrzed = NULL;
nowy->slowoPo = NULL;
nowy->nast = NULL;
return nowy;
}
Wezel *listaPush(Wezel **glowa, Wezel *wezel) {
if (!(*glowa)) {
glowa = &wezel;
return (*glowa);
} else {
wezel->nast = (*glowa);
glowa = &wezel;
return (*glowa);
}
}
Wezel *wczytajListeSlowZPliku(char *sciezka) {
Wezel *listaSlow = NULL;
Wezel *temp = NULL;
FILE *plik = fopen(sciezka, "r");
char bufor[512];
if (!plik) {
printf("Blad otwarcia pliku %s", sciezka);
return NULL;
}
while (feof(plik) == 0) {
if (fgets(bufor, 512, plik) == NULL) {
printf("Blad wczytania linii z pliku %s", sciezka);
return NULL;
}
temp = utworzWezel();
temp->slowoPrzed = strtok(bufor, " ");
temp->slowoPo = strtok(NULL, " ");
listaSlow = listaPush(&listaSlow, temp);
}
fclose(plik);
return listaSlow;
}
int main (int argc, char *argv[]) {
Wezel *listaSlow = wczytajListeSlowZPliku("lista.txt");
printf("%s, %s", listaSlow->slowoPrzed, listaSlow->slowoPo);
return 0;
}