Reversing linked list iteratively and recursively
void reverse(Node*& head) {
if (!head) return;
Node* prev = NULL;
Node* curr = head;
while (curr) {
Node* next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
head = prev;
}
void reverse(Node*& p) {
if (!p) return;
Node* rest = p->next;
if (!rest) return;
reverse(rest);// reverse 之后rest是新list的头
p->next->next = p; //p 之后第一个element的next要指回 p
p->next = NULL;
p = rest;
}

REF:
- http://articles.leetcode.com/reversing-linked-list-iteratively-and/
- http://geeksforgeeks.org/wp-content/uploads/2009/07/Linked-List-Rverse.gif
Comapny:google