TP 9 exo2: Better handling of special cases in list_delete()
[TD_C.git] / TP_9 / exo2 / clist.c
index a089750ff01ae755ccd5e6f8c21f7b091a245107..9ebb34817e5982fa3b3131e388d01b320f6a3a70 100644 (file)
@@ -55,12 +55,15 @@ link_t* list_insert(link_t* head, unsigned index, int value) {
 link_t* list_delete(link_t* head, unsigned index) {
     link_t* head_prev = NULL;
     link_t* head_next = NULL;
+    link_t* head_ret = NULL;
    
-    if (index == 0) {
+    if (head == NULL) {
+        return NULL;
+    } else if (index == 0) {
         head_next = head->next;
         free(head);
         head = head_next;
-        return head;
+        head_ret = head;
     } else {
         link_t* head_first = head;
         for (unsigned i = 0; i < index-1; i++) {
@@ -72,7 +75,12 @@ link_t* list_delete(link_t* head, unsigned index) {
         free(head);
         head = head_prev;
         head->next = head_next;
-        return head_first;
+        head_ret = head_first;
+    }
+    if (head_ret != NULL) {
+        return head_ret;
+    } else {
+        return NULL;
     }
 }
 
@@ -110,12 +118,12 @@ int list_get(link_t* head, unsigned index) {
     }
 }
 
-void list_clear(link_t* link) {
+void list_clear(link_t* head) {
     link_t* next_link = NULL;
 
-    while (link != NULL) {
-        next_link = link->next;
-        free(link);
-        link = next_link;
+    while (head != NULL) {
+        next_link = head->next;
+        free(head);
+        head = next_link;
     }
 }