Usuwanie wszystkich wartości lista jednokierunkowa

0

Witam, mam za zadanie opracować program usuwający z listy wszystkie wystąpienia wartości x w wersji rekurencyjnej. Do tej pory udało mi się napisać taki kod jednakże wygląda na to iż pętla jest nieskończona a mam brak pomysłów.
Funkcja UPEL(l) usuwa pierwszy element listy.
Poniższa funkcja działa w taki sposób iż zaczynam sprawdzanie i usuwanie od 2 elementu , a następnie zajmuje się głową listy.

 
void usunpowR(lista *l, int n)
{
	lista r=*l;
	lista tmp;
	while((*l)->nast)
	{
	if((*l)->nast->klucz != n)
		usunpowR(&(*l)->nast, n);
	else
	{
		tmp=(*l)->nast;
		(*l)->nast=tmp->nast;
		free(tmp);
		(*l)=(*l)->nast;
	}
        }
	if(r->klucz == n && r->nast==0)
		free (r);
	else if(r->klucz == n && r->nast!=0)
	{
		UPEL(l);
	}	
}
1

A ta pętla to po co tam jest? Miało być rekurencyjnie, a nie iteracyjnie.

void usunpowR(lista l, int n)
{
	if(l == NULL) return; 
	
	lista next = l->nast;
	
    if (next && next->klucz == n) 
	{
		l->nast = next->nast;
		free(next);
		next = l->nast;
	}
	
	usunpowR( next, n );
}
0

Dziękuje bardzo :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1