Answer to Question 33A-4

void destroy(List L)
{
  if(!isEmpty(L))
  {
    destroy(tail(L));
    delete L;
  }
}

A faster way to do this is to use a loop, but the definition is a little more involved since you have to be sure not to delete a cell too soon. As a result, mistakes are more likely.

void destroy(List L)
{
  List* p = L;
  while(!isEmpty(p))
  {
    List* q = tail(p);
    delete p;
    p = q;
  }
}