Recursive Linked Lists

Drop a list

1
2
3
4
5
void list_drop_recursive(node *curr) {
  if (curr == NULL) return;
  list_drop_recursive(curr->next);
  free(curr);
}

Delete a node from a list

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
void list_delete_recursive(node *curr, node *it) {
  if (curr == NULL) return NULL;
  if (curr == it) {
    node next = curr->next;
    free(curr);
    return next;
  }
  curr->next = list_delete_node(curr->next, it);
  return curr;
}

Max value in an array (Divide and Conquer)

Iterative approach

Complexity: O(n)

1
2
3
4
5
6
int array_max(int a[], size_t n) {
  int max = a[0];
  for (size_t i = 0; i <; i++) {
    if (a[i] > max) max = a[i];
  }
}

Recursive approach

Complexity: O(n) ?

1
2
3
4
5
6
7
int array_max(int a[], size_t l, size_t, r) {
  if (l == r) return a[l];
  int m = (l + r) / 2;
  int m1 = array_max(a, l, m);
  int m2 = array_max(a, m+1, r);
  return m2 > m1 ? m2: m1;
}