Original solution implemented in Java , i only translated it to C
with your variable names
node* r_reverseItem(node * head)
{
if( !head ) // empty list
return NULL;
if( !(head->next) ) //last element becomes the head of the reversed list
return head;
node *currentNode = head->next; //preserve next element
head->next = NULL;
node* newHead = r_reverseItem(currentNode);
currentNode->next = head;
return newHead; //once you have head you don't change it
}