Dunque, per prima cosa il while dovrebbe essere scritto così:
while((val > (current->dato)) && (current->succ != NULL))
Poi prova a ricontrollare questa parte:
Mi mandano a male le listecodice:if(pre==NULL) { new->succ=current; } else { post=current; current=new; new->succ=post; pre->succ=new; }