diff --git a/ex4.c b/ex4.c new file mode 100644 index 0000000..fb5b180 --- /dev/null +++ b/ex4.c @@ -0,0 +1,85 @@ +#include +#include + + +typedef struct Point { + float x, y; +} Point; + + +typedef struct Node { + Point point; + struct Node *next; +} Node; + + +Node* createNode(float x, float y) { + Node* newNode = (Node*)malloc(sizeof(Node)); + if (newNode == NULL) { + printf("Erreur d'allocation mémoire\n"); + exit(1); + } + newNode->point.x = x; + newNode->point.y = y; + newNode->next = NULL; + return newNode; +} + + +void printList(Node* head) { + Node* current = head; + while (current != NULL) { + printf("(%.2f, %.2f) -> ", current->point.x, current->point.y); + current = current->next; + } + printf("NULL\n"); +} + + +void removeNegativePoints(Node** headRef) { + Node* current = *headRef; + Node* prev = NULL; + + while (current != NULL) { + if (current->point.x < 0 && current->point.y < 0) { + Node* temp = current; + if (prev == NULL) { + *headRef = current->next; + } else { + prev->next = current->next; + } + current = current->next; + free(temp); + } else { + prev = current; + current = current->next; + } + } +} + + +int main() { + + Node* head = createNode(1.0, 2.0); + head->next = createNode(-1.0, -3.0); + head->next->next = createNode(4.0, -2.0); + head->next->next->next = createNode(-2.0, -2.0); + head->next->next->next->next = createNode(5.0, 6.0); + + printf("Liste avant la suppression des points négatifs :\n"); + printList(head); + + removeNegativePoints(&head); + + printf("Liste après la suppression des points négatifs :\n"); + printList(head); + + + while (head != NULL) { + Node* temp = head; + head = head->next; + free(temp); + } + + return 0; +}