Próbowałem tą funkcję użyć w moim programie, ale niestety nie chcę działać. Wywala program na tej funkcji.
#include <stdio.h>
#include <stdlib.h>
typedef struct element element;
struct element
{
int klucz; // przechowywana wartość
struct element *nast; // wskaźnik na kolejny element listy
};
void dodaj(element **lista, int x)
{
element *e, *tmp;
e = malloc(sizeof(element)); // alokowanie pamieci
e->klucz=x;
if (*lista == NULL) // sprawdzamy czy to pierwszy element listy
{
e->nast = *lista;
*lista = e;
// jeżeli tak to nowy element jest teraz początkiem listy
}
else
{
// w przeciwnym wypadku wędrujemy na koniec listy
tmp = *lista;
while (tmp->nast != NULL)
// znajdujemy wskaźnik na ostatni element
tmp=tmp->nast;
tmp->nast = e; // ostatni element wskazuje na nasz nowy
e->nast = NULL; // ostatni nie wskazuje na nic
}
}
void wypisz_liste(element *lista)
{
element *wsk=lista; //Ustaw wskaźnik roboczy na pierwszym elemencie listy
while( wsk != NULL ) //Jeśli wskaźnik ma wartość NULL, przerwij
{
printf ("%lu\n", wsk->klucz); //Wypisz element wskazywany przez wskaźnik
wsk = wsk->nast; //Przesuń wskaźnik na element, który jest wskazywany przez pole nast
}
printf("\n");
}
void odwroc(element **head)
{
element *i,*n=NULL,*h=NULL;
for(i=*head;i;i->nast=h,i=n)
n=i->nast;
*head=h;
}
main ()
{
element *lista, *e;
int i, h, n;
lista=NULL;
printf("Podai ilosc liczb");
scanf("%i", &n);
for (i=0; i<(n); i++)
{
printf("Podaj liczbe: \n");
scanf("%i", &h);
dodaj(&lista, h);
}
wypisz_liste(lista);
odwroc(lista);
}