C++ does not have automated garbage collection like some other languages that release storage once it is no longer referenced. There are a number of reasons for this, and a discussion on the topic can be found in Why doesn't C++ have a garbage collector?. 
This means that which is newed must be deleted or you have a leak. 
Say you have

If you do not delete the original value of head before overwriting head,  

the address of Node 1 is no longer known, making it next to impossible to track down the allocation in order to delete it. This forces a leak. 
But if you delete head before re-pointing it, 

you can't head->next to find the next node, and you lose and leak the whole list.
However, if you make a temporary copy of the address of head, 

old in this case, you can safely re-point head 

and still have the address of the allocation you need to delete stored in old.