io il secondo while proprio non l'ho capito O_o
io farei una cosa tipo:
codice:
int i = hash(x,ht);
int_list*p = ht -> h_table[i];   
int_list*q = ht -> h_table[i];
if(p==NULL) return;
if(p->info == x){
      ht->h_table[i] = p->next;
      free(p);
      return;
}
p=p->next;
for(p; p==NULL; p = p->next){
      if(p->info == x){
          q->next = p->next;
          free(p);
          break;
      }
      q=q->next;
}