Whenever you need to deallocate a single node, just stick it on the free list. Whenever you need to allocate a single node, check the free list first. If there is a node on it, take it off and use it. Only if the free list is empty do you need to do a real allocation.
If you ever deallocate all the nodes at once, any nodes on the free list become invalid. Be sure you make the free list empty.
A free list can be singly-linked, even if the nodes are designed for use in a doubly-linked list or some other data structure. Just make sure you consistently use the same pointer within the free list.
Pointer Traps