Because if you do not un-reserve the memory space, your program may exhause all available memory space and a subsequent new will fail; causing your program to crash
Syntax: delete AddressValue; |
Example of usage: ListElem *p; p = new ListElem; ... delete p; |
Code used to delete first element from a list:
ListElem *p;
if (head != NULL ) // Must make sure list is not empty
{
p = head; // Save head
head = head->next;
delete p; // Use saved value to return memory !!
}
|
| |
 
So we must be careful to maintain information on the last_but_one element while we are searching for the last element !!!
I.e., AFTER deletion of the (only) element, the list becomes empty (kinda like the empty list case....)
| |
Code used to delete the last element from a list:
ListElem *last;
ListElem *last_but_one;
if ( head != NULL ) // Delete only from non-empty list
{
if ( head->next == NULL )
{ // Handle special case: List has 1 element
last = head; // Save for delete operator
head = NULL;
delete last; // Use saved value to delete element
}
else
{ // The general case
// Find the "last_but_one" element
last_but_one = head;
while ( last_but_one->next->next != NULL )
{
last_but_one = last_but_one->next;
}
// Delete element following the "last_but_one" element
last_but_one->next = NULL;
delete last;
}
}
|