dave, the tricky answer given below is not acceptable in interview as well as in real programming. Please dont take these words as negative but try formulating solutions which are simple to understand and elegant. for example the invariants in above code and termination condition of -2 is not good.
for example you can write --
Node* prev = &head;
Node* curr = prev->next;
while(curr) {
Node* tmp = curr->next;
curr->next = prev;
prev=curr;
curr = tmp;
}
return prev;