/* Allocate storage for the element. */ if ((new_element = (ListElmt *)malloc(sizeof(ListElmt))) == NULL) { return-1; }
/* Insert the element into the list. */ new_element->data = (void *)data;
if (element == NULL) { /* Handle insertion at the head of the list. */ if (list_size(list) == 0) { // 只有一个节点的情况下, 头节点=尾节点,当前节点的下一个节点也是头节点 list->tail = new_element; new_element->next = list->head; list->head = new_element; }
}else { /* Handle insertion somewhere other than at the head */ if (element->next == NULL) { list->tail = new_element; }
/* Adjust the size of the list to acount for the inserted element. */ list->size ++ ; return0; }
/* * list_rem_next */ intlist_rem_next(List *list, ListElmt *element, void **data) { ListElmt *old_element = NULL; /* Do not allow removal from an empty list. */ if (list_size(list) == 0) { return-1; }
/* Remove the element from the list. */ if (element == NULL) { /* Handle removal from the head of the list. */ *data = list->head->data; old_element = list->head; list->head = list->head->next;
if (list_size(list) == 1){ list->tail = NULL; }
}else { /* Handle removal from somewhere other than the head. */ if (element->next == NULL) { return-1; }