Voglio cancellare uno o più elementi da una lista ma quando ci provo o cancello tutta la lista o nulla...

codice:
[...]
typedef struct OSTACOLO
{
	int x0, x1, y0, y1;
	struct OSTACOLO *suc;
} OSTACOLO;

OSTACOLO *Ostacolo = NULL;

int inseriscoInTesta(int a, int b, int c, int d)
{
	OSTACOLO *nuovo;

	nuovo = malloc(sizeof(OSTACOLO));
	nuovo->x0 = a;
	nuovo->y0 = b;
	nuovo->x1 = c;
	nuovo->y1 = d;
	nuovo->suc = Ostacolo;

	Ostacolo = nuovo;

	return 0;
}

int main(void)
{
	[...]
	inseriscoInTesta(a, b, c, d);
	[...]
	elimina(x, y);
	[...]
}
...e fin qui tutto OK...
Il problema viene quando devo scorrere tutta la lista ed eliminare tutti quegli ostacoli che soddisfano TUTTE queste condizioni:
ostacolo_corrente->x0 <= a
a <= ostacolo_corrente->x1
ostacolo_corrente->y0 <= b
b <= ostacolo_corrente->y1



Ho provato una cosa del genere...
codice:
int elimina(int a, int b)	// NON FUNZIONA
{
	if(Ostacolo != NULL)
		Ostacolo = elimina_ostacolo(Ostacolo, a, b);
	return 0;
}

OSTACOLO *elimina_ostacolo(OSTACOLO *primo, int a, int b) // NON FUNZIONA
{
	OSTACOLO secondo;

	primo = elimina_ostacolo(primo->suc, a, b);

	if(primo != NULL)
	{
		if(primo->x0 <= a && a <= primo->x1)
		{
			if(primo->y0 <= b && b <= primo->y1)
			{
				printf("da eliminare: %d %d %d %d\n", primo->x0, primo->y0, primo->x1, primo->y1);
			}
		}
	}
	return primo;
}
...con scarsisssssssimi risultati...