/* Definition of Linked List*/
struct Node
{
item data;
struct Node* next;
};
/* Insert Operation */
void list_insert(struct Node** head, struct Node* prev, item data)
{
struct Node* new = (struct Node*) malloc (sizeof(struct Node));
new -> data = data;
if(prev == NULL) /* INSERTING A HEAD NODE */
{
new -> next = *head;
*head = new;
}
else /* INSERTING A NON-HEAD NODE */
{
new -> next = prev -> next;
prev -> next = new;
}
return;
}
/* Remove Operation */
void list_remove(struct Node** head, struct Node* prev)
{
if(*head == NULL || ( prev != NULL && prev->next == NULL) )
return;
struct Node* victim;
if( prev == NULL) /* REMOVING A HEAD NODE */
{
victim = *head;
*head = victim -> next;
}
else /* IN CASE PREV IS A TAIL NODE */
{
victim = prev -> next;
prev -> next = victim -> next;
}
free(victim);
return;
}