TP 9 exo2: Add list_insert and list_delete linked list helpers
[TD_C.git] / TP_9 / exo2 / clist.c
index 0ee532f36b283d0a8795cf2b10348bf066acfb15..0aa9e37da73e1271d043a5a82796f75742999754 100644 (file)
@@ -31,6 +31,47 @@ link_t* list_prepend(link_t* head, int value) {
     return first_link;
 }
 
+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;
+    }
+    //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;
+   
+    if (index == 0) {
+        head_next = head->next;
+        free(head);
+        head = head_next;
+        return head;
+    } else {
+        for (unsigned i = 0; i < index-1; i++) {
+            head = head->next;
+        }
+        head_prev = head;
+        head = head->next;
+        head_next = head->next;
+        free(head);
+        head = head_prev;
+        head->next = head_next;
+        return head_first;
+    }
+}
+
 unsigned list_count(link_t* head) {
     int count = 0;