void processbody(Factor * factor)
{
  Factor * post;

  while(NULL!=factor){
    post=factor->next;
    free(factor);
    factor=post;
  }
}

再帰使わないといけない理由があるの?