Example #1
0
void
link_list_delete(link_list *list, link_node *node)
{
        link_node *prev = node->prev;
        link_node *next = node->next;
        if (prev) {
                prev->next = next;
        } else {
                /*
                 * deleted node is head node, and 'next' node would be
                 * first node of link list, so it would place 'next' node
                 * as new head node of link list.
                 */
                list->head =next;
        }

        if (next) {
                next->prev = prev;
        } else {
                /*
                 * deleted node is tail node, and 'prev' node would be
                 * last node of link list, so it would place 'prev' node
                 * as new tail node of link list.
                 */
                list->tail = prev;
        }
        link_node_free(node);
        list->length--;
}
int main(void)
{
	//	link_head_init(&link_head);

	int a[5] = {1,2,3,4,5};
	int i;
	node_t *tmp = NULL;
	for (i = 0; i < 5; i++)
		link_head = link_insert_e(link_head, a[i]);
	link_print(link_head);
	//tmp = link_search(link_head, 4);
	//printf("%d\n", tmp->val);
	tmp = link_remove(link_head, 3);
	link_node_free(tmp);
	link_print(link_head);
	link_destroy(link_head);
	return 0;
}