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; } } |