Napisałam funkcję, która ma za zadanie "usuwać" taki element z listy, który wskażemy. Ogólnie program działa dla wszystkich cyfr za wyjątkiem ostatniej ( każdą cyfrę którą wskażę usuwa, tylko jak wskażę ostatnią to program się zawiesza. Aha i jak jakaś cyfra się powtarza to też nie usuwa jej tyle razy ile się pojawiła,ale tylko raz. :/
Ogólnie da się to zrobić prościej i wiem, że rozwiązanie może wydawać się dziwne, tym bardziej , że chyba lepiej używać do tego free(), ale niestety prowadząca kazała tym sposobem.
Z góry dziękuję za poświęcony czas :)
typedef struct el_listy{
int klucz;
struct el_listy * nast;
}LISTA,*LISTAWSK;
void dodajMalejaco(int x,LISTAWSK g){
LISTAWSK pom;;
while(g->klucz>=x && g->nast!=NULL)g=g->nast;
pom=(LISTAWSK)malloc(sizeof(LISTA));
if(g->nast==NULL){
pom->klucz=x;
pom->nast=NULL;
g->nast=pom;
}
else{
pom->klucz=g->klucz;
pom->nast=g->nast;
g->klucz=x;
g->nast=pom;
}
}
void dodajZa(LISTAWSK glowa,int x){
LISTAWSK pom=(LISTAWSK)malloc(sizeof(LISTA));
while(glowa->nast!=NULL)glowa=glowa->nast;
pom->klucz=x;
pom->nast=NULL;
glowa->nast=pom;
}
void dodajZaPierwszym(LISTAWSK glowa,int nowy){
LISTAWSK pom;
pom=(LISTAWSK)malloc(sizeof(LISTA));
pom->klucz=nowy;
pom->nast=glowa->nast;
glowa->nast=pom;
}
void dodajPrzedPierwszym(LISTAWSK glowa,int nowy){
LISTAWSK pom=(LISTAWSK)malloc(sizeof(LISTA));
pom->klucz=glowa->klucz;
pom->nast=glowa->nast;
glowa->klucz=nowy;
glowa->nast=pom;
}
void dodajPoKonkretnym(LISTAWSK glowa,int nowy,int ktory){
LISTAWSK pom=(LISTAWSK)malloc(sizeof(LISTA));
while(glowa->klucz!=ktory){
glowa=glowa->nast;
}
pom->klucz=nowy;
pom->nast=glowa->nast;
glowa->nast=pom;
}
LISTAWSK newNode(int new_data){
LISTAWSK new_node =(LISTAWSK) malloc(sizeof(LISTA));
new_node->klucz = new_data;
new_node->nast = NULL;
return new_node;
}
void usunKonkretny(LISTAWSK glowa,int konkretny){
LISTAWSK pom;
while(glowa->klucz!=konkretny && glowa->nast!=NULL)glowa=glowa->nast;
pom=glowa->nast;
if(glowa->klucz==konkretny && glowa->nast!=NULL){
//pom=glowa->nast;
glowa->klucz=pom->klucz;
glowa->nast=pom->nast;
}
else if(pom==NULL && glowa->klucz==konkretny){
pom=glowa;
glowa=pom->nast;
while(glowa->nast!=NULL){
glowa=glowa->nast;
pom=pom->nast;
}
pom->nast=NULL;
}
}
int main(){
LISTAWSK glowa;
int licznik;
glowa = newNode(2);
dodajMalejaco(1,glowa);
dodajZa(glowa,3);
dodajZaPierwszym(glowa,7);
dodajPrzedPierwszym(glowa,2);
puts(" ");
printf("Wszystkie cyfry w liscie:\n");
print(glowa);
printf("\n Po usunieciu:");
usunKonkretny(glowa,7);
print(glowa);
return 0;
}