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:
Post a Comment