Вы не можете достичь того, что пытаетесь сделать только с этой структурой.Вам нужно как минимум два указателя, один для элементов списка списков, а другой для списка char*
.
С кодом, который вы можете получить, вы можете получить массив массивов списков, используя:
list_1 = (struct node**)malloc(sizeof(struct node*) * SIZE);
.следующее:
struct node{
char* data;
node* next;
};
struct list{
list* next;
node* curr_list;
};
Как видите, теперь у вас есть специальный узел для списка списка, который указывает как на следующий элемент списка списков, так и на список normal строк.
Ниже приведен полный пример кода с main
.Вы можете попробовать это здесь .
#include <stdio.h>
#include <stdlib.h>
// node that can hold char * (strings) and next
struct node{
char* data;
struct node* next;
};
struct list{
struct list* next;
struct node* curr_list;
};
int main(){
struct node node2;
node2.data="second";
node2.next=NULL;
struct node node1;
node1.data="first";
node1.next=&node2;
struct list l1;
l1.next=NULL;
l1.curr_list= &node1;
struct node node4;
node4.data="fourth";
node4.next=NULL;
struct node node3;
node3.data="third";
node3.next= &node4;
struct list l2;
l2.next=NULL;
l2.curr_list= &node3;
l1.next = &l2;
struct list* pl = &l1;
int i = 0;
while(pl){
printf("%s %d\n","list",i++);
struct node* n = pl->curr_list;
while(n){
printf("%s\n",n->data);
n=n->next;
}
pl = pl->next;
printf("\n");
}
return 0;
}