TP 9 exo2: Fix the link_delete function return value or code cleanup.
[TD_C.git] / TP_9 / exo2 / clist.c
index 2e0352de109dfede2612bc175e0a6e9ab85c4c63..edc296473e54c3910d0d4ea5fe3c3058aaf2913a 100644 (file)
@@ -32,33 +32,38 @@ link_t* list_prepend(link_t* head, int value) {
 }
 
 link_t* list_insert(link_t* head, unsigned index, int value) {
-    link_t* link_insrt = list_new(value);  
-    link_t* head_first = head;
-    //link_t* head_prev = NULL;
-    link_t* head_next = NULL;
 
-    for (unsigned i = 0; i < index; i++) {
-        head = head->next;
+    if (index == 0) {
+        return list_prepend(head, value);  
+    } else if (index == list_count(head)) {
+        return list_append(head, value);
+    } else {
+        link_t* link_insrt = list_new(value);  
+        link_t* head_first = head;
+        link_t* head_next = NULL;
+        for (unsigned i = 0; i < index-1; i++) {
+            head = head->next;
+        }
+        head_next = head->next;
+        head->next = link_insrt;
+        head = link_insrt;
+        head->next = head_next; 
+        return head_first;
     }
-    //head_prev = head;
-    head->next = link_insrt;
-    head_next = head->next;
-    head = link_insrt;
-    head->next = head_next; 
-    return head_first;
 }
 
 link_t* list_delete(link_t* head, unsigned index) {
-    link_t* head_first = head;
     link_t* head_prev = NULL;
     link_t* head_next = NULL;
+    link_t* head_ret = NULL;
    
     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++) {
             head = head->next;
         }
@@ -68,7 +73,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;
     }
 }
 
@@ -106,12 +116,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;
     }
 }