Instead of expensive copy new data to be popped then later on invoking free on a node's data and itself, just return the pointer to it's data and then free the node