como anidar una lista copie tu código lo probé verifique los detalles tu codigo esta bien lo unico que tiene malo es que no tiene un inicio y ultimo y hay cosas que estaban de mas y tambien no estaba guardando los datos en la siguiente lista sino que se gurdaba en la misma y se reasignaba otra vez
y llegué a la conclusión a como anidar una lista correctamente
Este aporte lo hago también ya que es un tema muy complejo y hay poca información!!
// lista
typedef struct producto
{
char nombre[300];
int cantidad[3];
float precio[3];
char marca[3][700];
struct producto *sig;
}pro;
//lista anidada
typedef struct carrito
{
pro *primer; // el nombre y luego el puntero para acceder a la lista
struct carrito *sig;
}car;
car *inicio,*ultimo2; // para tener mas control en la lista
// crear
//funcion
// la lista debe estar llena
void crear(pro *prim ,int *dato,int opc)// int dato y opc no es necesario
{
/////////////////
pro *inicio2;
pro *ultimo3;
/////////////////
inicio2=(pro *)NULL;
ultimo3=(pro *)NULL;
//////////////////////
pro *aux,*actul;
//////////////////////
car *aux2;
int *nu_dat; nu_dat=dato; char dato2[50]; int n;
///////////////////////
pro *princi; princi=prim;
//////////////////////////////
aux=(pro *) malloc(sizeof(pro));
aux2=(car *) malloc(sizeof(car));
/////////////////////////////
if(aux==NULL && aux2==NULL)
{
printf("no hay memoria disponible");
}//actul recibe segun opc la direcion que contiene
///////////////////////////////
actul=posicion(princi,opc);//la lista cuando opc Ej:opc=1
aux->cantidad[0]++;//cada vez que entra al menu hay un
///////////////////
if(dato[1]==0) //producto nuevo
{//segun el dato[posicion] se le asina de lista
strcpy(aux->nombre,actul->nombre);//a lista anidada
strcpy(aux->marca[0],actul->marca[dato[1]]);
aux->precio[0]=actul->precio[dato[1]];
//Ej: Alicate lacutre 12.4 se copia a la otra lista anidada
}
/////////////////////
if(dato[1]==1)
{ strcpy(aux->nombre,actul->nombre);
strcpy(aux->marca[0],actul->marca[dato[1]]);
aux->precio[0]=actul->precio[dato[1]];
}
/////////////////////
if(dato[1]==2)
{strcpy(aux->nombre,actul->nombre);
strcpy(aux->marca[0],actul->marca[dato[1]]);
aux->precio[0]=actul->precio[dato[1]];
}
//////////////////////////
aux2->primer=aux; //se le asigna lo que hay aux a aux->primer
aux2->sig=NULL; //donde aux->prime es la istancia de la otra
/////////////////// lista
aux->sig=NULL; //tanto aux aux NULL para inicializarlo
if(inicio==NULL)
{
ultimo2=aux2;
inicio=aux2;
}
else
{
ultimo2->sig=aux2;
ultimo2=aux2;
}
//printf("%s",r->primer->nombre);
getch();
}
//““““““““““““““““““““““““““““““““““““““““““““““““““““““““““