The problem with not being able to play the last song was because I had `> 1` in some if not `> 0` or  `>=1`.  The problem with your code is I was intending to return the *new* head of unPlayed not the old head. You shouldn't do that with out checking the *new* length. 
I have looked at how the code is used however and I never take advantage of the returned value so I think I will change the return type to void.