# include <stdio.h>
# include <stdlib.h>

struct mail {
  double x;
  double y;
  struct mail* suivant;
};

typedef struct mail maillon;

void afficher_liste(maillon* liste) {
	maillon* p;
	for (p = liste; p != NULL; p = p->suivant) {
		printf("(%.1f, %.1f)  ->  ", p->x, p->y);
	}
	putchar('\n');
}

maillon* creation_liste(void) {
	int i;
	maillon* p;
	maillon* premier;
	maillon* s;
	srand(time(NULL));
	premier = (maillon*) malloc(sizeof(maillon));
	if (!premier) {
		printf("Erreur d'allocation mémoire. (1) \n");
	}
	premier->x = -12; /* Le premier maillon sera toujours négatif, les autres seront aléatoires */
	premier->y = -3;
	p = premier;
	for (i = 0; i != 4; i++) {
		s = (maillon*) malloc(sizeof(maillon));
		if (!s) {
			printf("Erreur d'allocation mémoire. (2) \n");
		}
		s->x = (rand() % 50) - 25;
		s->y = (rand() % 50) - 25;
		p->suivant = s;
		p = s;
	}
	return premier;
}

maillon* supprime_coord_negatives(maillon* liste) {
	maillon* p;
	maillon* premier = liste;
	maillon* precedent = liste;
	for (p = liste; p != NULL; p = p->suivant) {
		if ((p->x) < 0.0 && (p->y) < 0.0) {
			p = precedent;
			p->suivant = p->suivant->suivant;
			precedent = p;
			p = p->suivant;
		}	
		else {
			precedent = p;
		}
	}
	return premier;
}

int main(void) {
	maillon* liste = creation_liste();
	afficher_liste(liste);
	afficher_liste(supprime_coord_negatives(liste));
	return EXIT_SUCCESS;
}
