}
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;
}
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;
}
}
}
}
-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;
}
}