This is needlessly complex. <code>
for (struct QueueNode *current = queue->head; current; current = current->next) { add a copy of current to the copy }
</code>