Hi. Can anyone explain me why do I need the following snippet in main:
// ????
if(element == NULL)
element = clist_next(clist_head(&list));
else
element = clist_next(element);
void clist_init(CList* list, void (*destroy)(void* data)) {
list->size = 0;
list->head = NULL;
list->destroy = destroy;
}
// insert a node after the current
int clist_ins_next(CList* list, CListElmt* element, const void* data) {
// create a new element
CListElmt* new_element;
if((new_element = malloc(sizeof(CListElmt))) == NULL)
return -1;
// set the data to the new element
new_element->data = (void*) data;
// insert when the list is empty
if(clist_size(list) == 0)
{
// keep a reference to itself
new_element->next = new_element;
list->head = new_element;
}
// insert when the list is not empty
else {
new_element->next = element->next;
element->next = new_element;
}
// update the size of the list
list->size++;
return 0;
}
int main(void) {
CList list;
CListElmt* element;
int* data;
int i;
clist_init(&list, free);
element = clist_head(&list);
for (i = 0; i <= 9; i++) {
if ((data = malloc(sizeof (int))) == NULL)
return EXIT_FAILURE;
*data = i;
if (clist_ins_next(&list, element, data) < 0)
return EXIT_FAILURE;
// ????
if(element == NULL)
element = clist_next(clist_head(&list));
else
element = clist_next(element);
}
print_list(&list);
return EXIT_SUCCESS;
}