Friday, August 29, 2008

Delete an item from a Singly Linked List

Because elements in a singly-linked list are maintained exclusively with links to the next element, any insertion or deletion of elements in the middle of a list requires modification of the previous element’s link. This may require a traversal of the list, because there’s no other way to find a preceding element. Special care must be taken when dealing with the head of the list.

Example Code:

bool DeleteElement( ListElement **head, ListElement *deleteMe )

{

ListElement *elem = *head;

// special case for head

if( deleteMe == *head )

{

*head = elem->next;

delete deleteMe;

return true;

}

while( elem )

{

if( elem->next == deleteMe )

{

/* elem is element preceding deleteMe */

elem->next = deleteMe->next;

delete deleteMe;

return true;

}

elem = elem->next;

}

// not found

return false;

}

No comments: