Witam
Mam napisać funkcję która będzie usuwać pierwszy element listy oraz funkcję która będzie usuwać wszystkie elementy listy.
Napisałem kod i wszystko jest w porządku oprócz tego że nie moge usunąć PIERWSZEGO elementu listy, pozostałe po wywołaniu funkcji i ich wartości usuwają się, problem tkwi tylko w pierwszym elemencie. Bardzo proszę o pomoc.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
typedef struct punkt
{
int x;
int y;
struct punkt *nast;
} el_listy;
el_listy *pierwszy;
void dodaj_do_listy (el_listy *lista, int liczba)
{
el_listy *wsk, *nowy;
wsk = lista;
while (wsk->nast != NULL)
{
wsk = wsk->nast; /* przesuwamy wsk aż znajdziemy ostatni element */
}
nowy =(el_listy*) malloc (sizeof(el_listy));
nowy->x = liczba;
nowy->nast = NULL;
wsk->nast = nowy; /* podczepiamy nowy element do ostatniego z listy */
}
void wypisz_liste(el_listy *lista)
{
el_listy *wsk=lista;
while( wsk != NULL )
{
printf ("%d \n", wsk->x);
wsk = wsk->nast;
}
}
void usun_z_listy(el_listy *lista, int element)
{
el_listy *wsk=lista;
while (wsk->nast != NULL)
{
if (wsk->nast->x == element) /* musimy mieć wskaźnik do elementu poprzedzającego */
{
el_listy *usuwany=wsk->nast; /* zapamiętujemy usuwany element */
wsk->nast = usuwany->nast; /* przestawiamy wskaźnik next by omijał usuwany element */
free(usuwany); /* usuwamy z pamięci */
}
else
{
wsk = wsk->nast; /* idziemy dalej tylko wtedy kiedy nie usuwaliśmy */
} /* bo nie chcemy zostawić duplikatów */
}
}
int main ()
{
pierwszy =(el_listy*) malloc (sizeof(el_listy));
pierwszy->x =2;
pierwszy->nast = NULL;
dodaj_do_listy (pierwszy, 3);
dodaj_do_listy (pierwszy, 4);
dodaj_do_listy (pierwszy, 5);
wypisz_liste(pierwszy);
usun_z_listy(pierwszy, 3);
wypisz_liste(pierwszy);
getchar();
}