Let's see if we can help you, Josh. First, I have edited your post to useCodeTags <-- click on this. Makes it much easier to read and discuss.
Second, look at Line 8 of your backup_list routine. It's writing out the structure pointed to by the address in head. You want each iteration of your while loop to write the next node in your list. That means the address in head has to change. Does it? If you think it does, tell me what line number to look at to see the code that changes it.
"Il y a peu de choses qui me soient impossibles..."