Newsgroup: it.comp.lang.c
Titolo: lista di liste

salve a tutti.devo realizzare una lista di liste ma ho qualche
problema.qualcuno mi saprebbe dare qualche indicazione?il codice che ho
fatto per le liste è il seguente:
//dicharazioni strutture liste
typedef struct nod
{
int data;
struct nod *next;
} node;
node *newnode(void)
{
return (node *)malloc(sizeof(node));
}
typedef struct nod_ri
{
char *data;
struct nod_ri *next;
} node_ric;
node_ric *newnode_ric(void)
{
return (node_ric *)malloc(sizeof(node_ric));
}
typedef struct nod_liste
{
struct nod_ri *lista;
struct nod_liste *next;
} node_list;
node_list *newnode_list(void)
{
return (node_list *)malloc(sizeof(node_list));
}
//
node_ric *r_tmp, *r_def,*ini;
node_list *l_tmp, *l_def;
//per creare un nuovo nodo della lista di liste (lista sterna) e
inserire il primo elemento della sua lista(lista interna):
ini=newnode_ric();
r_def=ini;
r_def->data = n;
r_def->next = NULL;
l_tmp=newnode_list();
l_tmp->lista=ini;
l_tmp->next=l_def;
l_def=l_tmp;
//per creare gli altri nodi delle liste interne
r_tmp=newnode_ric();
r_tmp->data = n;
r_tmp->next = NULL;
r_def->next = r_tmp;
r_def = r_tmp;
qualcuno sa dirmi se c'è qualoche errore???perchè provando poi a
stampare il risultato delle liste mi dà sempre solo il valore
dell'ultimo nodo dell'ultima lista inserita.
grazie.

dell'ultimo nodo dell'ultima lista inserita.
Che intendi per "risultato delle liste" ?
In che modo esegui la stampa ?
Un codice di esempio (scritto al volo) per la gestione di una lista è
il seguente:
#include <stdio.h>
#include <stdlib.h>
typedef struct node_tag {
        int data;
        struct node_tag *next;  
} node_t, *pnode_t;
pnode_t node_new()
{
     pnode_t result = malloc(sizeof *result);
     if (result) result->next=0;
     return result;   
}
void list_insert(pnode_t *phead, int x)
{
     if (*phead) list_insert(&(*phead)->next, x);
     else {
       *phead = node_new();
       (*phead)->data = x;
     }
}
void list_print(pnode_t head)
{
     if (head) {
        printf("%d; ", head->data);       
        list_print(head->next);
     }
     else printf("\n");
}
int main()
{
    pnode_t head=0;
 
    list_insert(&head, 4);  
    list_insert(&head, 2);
    list_insert(&head, -1);
    list_insert(&head, 5);            
    list_insert(&head, 8);
    list_insert(&head, 3);        
 
    list_print(head);
 
    return 0;
}

scusa ma così facendo non si avrebbe una semplice lista di interi????

scusa ma cosě facendo non si avrebbe una semplice lista di interi????
Sě, ma ovviamente sullo stesso principio costruisci una lista di
liste.

liste.
Per intenderci:
#include <stdio.h>
#include <stdlib.h>
#define ITEMCOUNT(x) (sizeof((x))/sizeof((x)[0]))
typedef struct node_tag {
        void *ptr;
        struct node_tag *next;  
} node_t, *pnode_t;
pnode_t node_new()
{
     pnode_t result = malloc(sizeof *result);
     if (result) result->next=0;
     return result;   
}
void list_insert(pnode_t *phead, void* ptr)
{
     if (*phead) list_insert(&(*phead)->next, ptr);
     else {
       *phead = node_new();
       (*phead)->ptr = ptr;
     }
}
void list_print(pnode_t head)
{
     if (head) {
        printf("%d; ", *((int*)head->ptr));       
        list_print(head->next);
     }
     else printf("\n");
}
/* ------------------------- */
void list_of_lists_print(pnode_t head)
{
     if (head) {
        list_print((pnode_t)head->ptr);
        list_of_lists_print(head->next);
     } 
     else printf("\n");
}
int main()
{
    int l1_data[] = {4, 2};
    int l2_data[] = {-1, 5, 8};
    int l3_data[] = {3, 4, 5, -7};
    pnode_t lol_head = 0;
    pnode_t l1_head=0;
    pnode_t l2_head=0;
    pnode_t l3_head=0;
    int i;
 
    for (i=0; i<ITEMCOUNT(l1_data); i++) 
      list_insert(&l1_head, &l1_data[i]);  
 
    for (i=0; i<ITEMCOUNT(l2_data); i++) 
      list_insert(&l2_head, &l2_data[i]);  
    for (i=0; i<ITEMCOUNT(l3_data); i++) 
      list_insert(&l3_head, &l3_data[i]);        
 
    list_insert(&lol_head, l1_head);
    list_insert(&lol_head, l2_head);
    list_insert(&lol_head, l3_head);
 
    list_of_lists_print(lol_head);
    return 0;
}