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