Hola, llegue a la siguiente resolucion del ejercicio, pero me parece que separe demasiado en casos y es engorrosa. Como podria solucionarla en menos casos y de forma mas clara?
// Precond : lista l ordenada
void insOrd (int x, lista &l) {
lista nuevo = new nodo_doble;
nuevo->elem = x;
lista dummy = new nodo_doble;
dummy->sig = l;
lista buscador = dummy;
bool listo = false;
while (buscador->sig != NULL && !listo) {
buscador = buscador->sig;
if (buscador->elem > x) {
listo = true;
nuevo->sig = buscador;
nuevo->ant = buscador->ant;
if (buscador->ant != NULL)
buscador->ant->sig = nuevo;
else
l = nuevo;
buscador->ant = nuevo;
}
}
// Llegue al final sin encontrar posicion para insertar o la lista era vacia
if (l == NULL) {
l = nuevo;
nuevo->ant = NULL;
nuevo->sig = NULL;
}
else if (!listo && buscador->sig == NULL) {
buscador->sig = nuevo;
nuevo->ant = buscador;
nuevo->sig = NULL;
}
delete dummy;
}