在C中的链表内部的链表上运行

在C中的链表内部的链表上运行,c,linked-list,C,Linked List,假设我有一个单面用作链表的结构,比方说 struct s1 { char *word; struct s1 *next; }; 现在我制作了另一个结构,它也应该是一个链表,它有第一个: struct s2 { int b; struct s1 *firstfroms1; struct s2 *next; } 在我的程序中,我想在s2上运行,但在它中,我想在firstfroms1导致的所有元素上运行。例如,如果s2中的一个列表在2次之后结束,并且第一个列表有

假设我有一个单面用作链表的结构,比方说

struct s1
{
   char *word;
   struct s1 *next;
};
现在我制作了另一个结构,它也应该是一个链表,它有第一个:

struct s2
{
    int b;
    struct s1 *firstfroms1;
    struct s2 *next;
}
在我的程序中,我想在s2上运行,但在它中,我想在firstfroms1导致的所有元素上运行。例如,如果s2中的一个列表在2次之后结束,并且第一个列表有来自s1的4个元素,那么我想在这四个元素上运行

问题是,当我写list->firstfroms1->word时,我只能访问s1中的第一个。如何移动该索引,直到在s1中达到NULL


感谢

循环s2列表,如果当前节点包含s1结构列表firstfroms1为非空,则在继续之前循环s2结构列表。因此,在循环中循环。

使用标准的链表语义无法做到这一点,其中每个列表元素都能够为您提供下一个元素或null。当您从侧面分支到s1列表时,这些列表元素不知道它们属于s2,并且一旦到达列表的末尾,它们就不知道该做什么

只有在s2中才知道有两个嵌套列表,因此只能在s2上迭代

但是,您必须返回s2元素。您将需要一个额外的解引用操作来从当前s2元素中获取当前s1元素,例如*some_s2.firstFromS1,假设您在迭代时更新firstFromS1