Hola estoy tratando de hacer una funcion que inserte nodo en una determinada posicion dada pero no he podido; tengo algunas fallas en el codigo y no se como solucionarlo
Espero me puedan ayudar,
les dejo el codigo
struct nodo{
char *texto;
struct nodo *siguientelinea;
};
typedef struct nodo *lineas;
struct listageneral{
char *nombrearchivo;
lineas primera;
};
typedef struct listageneral *Archivo;
TipoRet InsertarLinea(Archivo &a,char *linea, unsigned int nroLinea){
if (a->primera == NULL)
{
lineas aux = new struct nodo;
aux->texto = linea;
aux->siguientelinea=a->primera;
a->primera=aux;
}
else if ((a->primera!=NULL)&&(nroLinea==1))
{
lineas aux1 = new struct nodo;
aux1->texto = linea;
aux1->siguientelinea=a->primera;
a->primera=aux1;
}
else if ((a->primera!=NULL)&&(nroLinea!=1))
{
Archivo p=NULL; // ver este caso
int posicion = 2;
while (posicion<nroLinea)
{
a->primera = a->primera->siguientelinea;
posicion++;
}
lineas aux2 = new struct nodo;
aux2->texto = linea;
aux2->siguientelinea = a->primera;
a->primera=aux2;
}
return OK;
El problema es...
Los errores son...
Disculpa pero no te entendi, me podes ayudar con el codigo?
Muchas gracias
Ni has dicho cuales son los errores, ni cuales son los problemas, ni qué no sabes hacer. Solo has dicho lo que tratas de hacer, y has mostrado el código.
Este es mi codigo, mi problema es que cuando agrego el nodo lo agrega despues de uno del mismo valor y yo lo nececito agregar antes,
Espero me puedan ayudar!
struct nodo{
char *texto;
struct nodo *siguientelinea;
};
typedef struct nodo *lineas;
struct listageneral{
char *nombrearchivo;
lineas primera;
};
typedef struct listageneral *Archivo;
TipoRet InsertarLinea(Archivo &a,,char *linea, unsigned int nroLinea){
if (a->primera==NULL)
{
lineas aux = new struct nodo;
aux->texto = linea;
aux->siguientelinea=a->primera;
a->primera=aux;
}
else
{
lineas nuevo_nodo = new struct nodo;
nuevo_nodo->texto = linea;
nuevo_nodo->siguientelinea;
nodo*primero = a->primera;
nodo*ant = NULL;
nodo*auxiliar = a->primera;
int posicion = 1;
while ((auxiliar!=NULL) && (posicion<=nroLinea))
{
ant = auxiliar;
a->primera = a->primera->siguientelinea;
auxiliar = a->primera;
posicion++;
}
ant->siguientelinea=nuevo_nodo;
nuevo_nodo->siguientelinea=auxiliar;
a->primera=primero;
}
while ((auxiliar!=NULL) && (posicion<=nroLinea))
{
ant = auxiliar;
a->primera = a->primera->siguientelinea;
auxiliar = a->primera;
posicion++;
}
ant->siguientelinea=nuevo_nodo;
nuevo_nodo->siguientelinea=auxiliar;
a->primera=primero;
En vez de poner posicion<=nroLinea, pon posicion<nroLinea.
Luego, tendrías que comprobar que ant no sea NULL. Si no es NULL, le asignas el nuevo nodo. Sino, le asignas el nuevo nodo a la lista.
En este tipo de algoritmos, lo mejor es que, si no lo lograste a la primera, lo borres y lo trates de hacer de nuevo. Pero no te pongas a escribir sin tener planteada la totalidad del algoritmo, y con totalidad me refiero a todas sus posibilidades lógicas (nroLinea==0, nroLinea>nroLineasLista, etc)
Como dato final, en la lista, te recomiendo guardar un entero indicando el número de elementos que tiene. Te ahorrará algunas operaciones (pero a la vez tendrás que actualizarlo en cada mdificación de la lista)