Majstersztyk to zaallokować tmp aby w następnej linijce nadpisać tmp=first
tmp=(Liczby*) malloc(sizeof(Liczby));
for (tmp=first; tmp!=NULL; tmp=tmp->next)
To by miało sens gdyby tmp był wskaźnikiem do wskaźnika(tablicą wskaźników) Liczby **tmp;
tmp = (Liczby**)malloc(ilość*sizeof(Liczby*)); by następnie używać tmp[0], tmp[ilość-1].
Przed ich użyciem tmp[0] = first lub tmp[0] = (Liczby*)malloc(sizeof(Liczby));
Nie wiem skąd Ci ten malloc dla tmp przyszedł do głowy(niepotrzebny w tym mejscu) bo mi taki kwiatek daje mi zawsze wrażenie jakbym brał udział w teście Turinga
http://www.filmweb.pl/film/Ex+Machina-2015-686419
Stworzyłeś tablice int w której rozmiar elementu zamiast być sizeof(int)=2 lub 4 jest sizeof(wskaźnik_int) tj 4 do 8B
int *tab=calloc(5, sizeof(*tab));
Liczysz na szczęście że first, last będą wyzerowane same będąc NULL, nexty mając NULL
int l;
int *tab=calloc(5, sizeof(*tab));
for (l=0; l<5; l++)
{
scanf("%d", &tab[l]);
dodaj(tab[l], first, last);
}
Dodaj samo w sobie działa poprawnie, mimo że jest dziwacznie napisane.
Mierzi mnie nazewnictwo, ta zmienna pomocnicza last oraz kolejność parametrów w funkcjach,
Dla przejrzystosci warto dodać dwie struktury zamiast jednej i zmiennych globalnych:
typedef struct Lista
{
Element(zamiast nazwy Liczby w mylącej formie mnogiej) *start, *zmienna_pomocnicza_koniec;
}
}Lista;
void dodaj(Lista *lista, int liczba);
void dodaj(Lista *lista, char *tekścior) {
int liczba = atoi(tekścior,);
dodaj(lista, liczba); }
Wówczas jest opcja wywołania dodaj(lista,coś) bez pałętającego się wszędzie last, które masz globalne, tak samo nazywasz zmienne lokalne… dla ułatwienia jest poprawnie ale niezbyt elegancko. Z czasem możesz dodać w ciele Lista pomocniczą zmienną count, sorted itp. dziwactwa jakie przyjdą do głowy a które będą wpływać na działanie funkcji listy Będzie wtedy jasne czego dotyczą, przyspieszą liste, nie będą się mieszać globalne z lokalnymi i nie będą się pałętać w wywołaniach funkcji.
Jeżeli Ci zależy na nauczeniu, to rozpracuj swój kod i nie szukaj gotowców, błędy masz conajmniej dwa gotowiec jest już w formie biblioteki standardowej C++ albo boost, jak już opanujesz C