reverse linked list, iterative, recursive
ListNode* reverse_list_recursive(ListNode *head) {
if(!head) return head;
if(!head->next) return head;
ListNode *new_head = reverse_list_recursive(head->next);
head->next->next = head;
head->next = NULL;
return new_head;
}
void reverse(Node*& p) {
if (!p) return;
Node* rest = p->next;
if (!rest) return;
reverse(rest);
p->next->next = p;
p->next = NULL;
p = rest;
}
ListNode* reverse_list_iterative(ListNode *head) {
if(!head || !head->next) return head;
ListNode *pre = NULL, *cur = head;
while(cur) {
ListNode *nxt = cur->next;
cur->next = pre;
pre = cur;
cur = nxt;
}
return pre;
}