sundeepblue
4/12/2014 - 2:31 AM

reverse linked list, iterative, recursive

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;
}