Buenas, ya se que este practico esta terminado, pero revisando las funciones me quedo una duda en la solución que proponen de este ejercicio, ya que creo que no consideran el caso en el que fuera insertarse al final de la lista la solución es :
else {
lista lpos = l ;
while ( lpos - > sig != NULL && p > 1) { // para quedar una ←-
posici ó n antes de p
p - -;
lpos = lpos - > sig ;
}
nuevo - > sig = lpos - > sig ;
lpos - > sig - > ant = nuevo ;
nuevo - > ant = lpos ;
lpos - > sig = nuevo ;
Este es el caso en el que no se inserta en el inicio, mi duda es , si lpos->sig == null , por ejemplo si p es muy grande y m tiene pocos elementos, cuando hacer lpos->sig->ant no estarían intentando ir al anterior de null? por lo que se debería de tomar como caso a parte no ?? queria saber si mi razonamiento es correcto, ya que la solucion que a mi me quedo le agregue una condicion:
if (lpos->sig == null){
nuevo->anterior = lpos;
nuevo->sig=null;
lpos->sig = nuevo;}
else {
nuevo->ant = lpos;
nuevo->sig= lpos->sig;
lpos->sig->ant= nuevo;
lpos->sig = nuevo;
}
estaría correcto? , la primera parte es igual a la solución.
Muchas Gracias.