<- RETURN

	
/* Idea is the use pointer arithmetics */

Element* reverse(Element *first){
	int diff1, diff2;

	if(!first || !(first->next))
		return first;

	diff1 = first - (Element *) NULL;
	diff2 = first->next - first;

	while(first+diff2){
		first->next = first - diff1;
		first = first + diff2;
		diff1 = diff2;
		diff2 = first->next - first;
	}
	first->next = first-diff1;

	return first;
}

FULL CODE