/* prog5.5.c */
int count(link x)
  { 
    if (x == NULL) return 0;
    return 1 + count(x->next); 
  }
void traverse(link h)
  { 
    if (h == NULL) return;
    processe(h); /* funcao de processamento da celula h */
    traverse(h->next, visit);
  }
void traverseR(link h, void (*visit)(link))
  { 
    if (h == NULL) return;
    traverseR(h->next, visit);
    processe(h); /* funcao de processamento da celula h */
  }
link delete(link x, Item v)
  { 
    if (x == NULL) return NULL;
    if (eq(x->item, v)) /* macro ou funcao para teste de igualdade */
      { link t = x->next; free(x); return t; }
    x->next = delete(x->next, v);
    return x;
  }
