#include <stdlib.h>
struct l {
  struct l *next;
  int data;
} *root = 0;

void free_l(struct l *p) {
  if (p->next)
    free_l(p->next);
  free(p);
}

#define N 10000000
int main(int argc, char **argv) {
  unsigned long i;
  for (i = 0; i < N; i++) {
    struct l *p = malloc(sizeof(struct l));
    p->next = root;
    root = p;
  }
  if (argc == 2) {
    struct l *p = root, *q;
    while (p) {
      q = p->next;
      free(p);
      p = q;
    }
  } else if (argc ==1) {
    free_l(root);
  }
  return 0;
}
/* end */
