int main(int argc, char **argv) { List *head = create_iter(6); List *revd = reverse_recur(head); return 1; }
//------------------------------------------------------------------ // Reverse the list recursively. //------------------------------------------------------------------ void reverse_recur(struct node **head, struct node *current){ struct node *prev; if(current->n_link == NULL ){ current->p_link = NULL; *head = current; return; } reverse_recur(head, current->n_link); // Recursive call. prev = current->n_link; // Save current node's n_link. prev->n_link = current; // Set previous node's n_link to current node. current->p_link = prev; // Set current node's p_link to current node's n_link. current->n_link = NULL; // Set current node's n_link to NULL. }
// reverses a list recursively // (each node is appended to the end // of its reversed tail) // RinetzkySagiv01: rev_app List* reverse_recur(List* head) { List *reversed; if (head == NULL) { return NULL; } reversed = reverse_recur(head->n); head->n = NULL; reversed = app_iter(reversed,head); return reversed; }