TP 9 exo2: Fix linked list insert helper function.
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Wed, 1 Mar 2017 20:36:16 +0000 (21:36 +0100)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Wed, 1 Mar 2017 20:36:16 +0000 (21:36 +0100)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
TP_9/exo2/clist.c
TP_9/exo2/exo2.c

index 2e0352de109dfede2612bc175e0a6e9ab85c4c63..a089750ff01ae755ccd5e6f8c21f7b091a245107 100644 (file)
@@ -32,24 +32,27 @@ 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;
    
@@ -59,6 +62,7 @@ link_t* list_delete(link_t* head, unsigned index) {
         head = head_next;
         return head;
     } else {
+        link_t* head_first = head;
         for (unsigned i = 0; i < index-1; i++) {
             head = head->next;
         }
index b7dae12490515e2f8b2e68c3522fc71a623d5325..3b62ea4620b90f7ffa7dffa6307d15163391a350 100644 (file)
@@ -22,11 +22,13 @@ int main() {
     printf("Valeur a index %d: %d\n", 0, list_get(head, 0));
     printf("Valeur a index %d: %d\n", 1, list_get(head, 1));
     printf("Valeur a index %d: %d\n", 2, list_get(head, 2));
-    //head = list_insert(head, 2, 7);
+    head = list_insert(head, 2, 7);
     printf("Valeur a index %d: %d\n", 1, list_get(head, 1));
     printf("Valeur a index %d: %d\n", 2, list_get(head, 2));
     printf("Valeur a index %d: %d\n", 3, list_get(head, 3));
-    head = list_delete(head, 2);
+    head = list_delete(head, 3);
+    printf("Valeur a index %d: %d\n", 0, list_get(head, 0));
+    printf("Valeur a index %d: %d\n", 1, list_get(head, 1));
     printf("Valeur a index %d: %d\n", 2, list_get(head, 2));
     printf("Valeur a index %d: %d\n", 3, list_get(head, 3));
     printf("Valeur a index %d: %d\n", 4, list_get(head, 4));