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

时间:2013-12-22 20:37:43

标签: c linked-list

假设我有一个结构,我用作链接列表(单面),让我们说

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之前移动“索引”?

谢谢

2 个答案:

答案 0 :(得分:0)

循环遍历s2列表,如果当前节点包含s1结构列表(firstfroms1非空),则在继续之前循环它们。所以,循环内循环。

答案 1 :(得分:0)

你不能使用标准的链表semantincs来做到这一点,其中每个列表元素都能够为你提供下一个元素或null。当您对s1列表进行“侧分支”时,这些列表元素不知道它们属于s2,并且一旦到达列表末尾它们就不知道该怎么做。

您有两个嵌套列表的知识仅在s2中可用,因此您只能在s2上进行迭代。

但是,您必须返回s2元素。假设您在迭代时更新firstFromS1,则需要额外的取消引用操作来从当前s2元素获取当前s1元素,如*(some_S2.firstFromS1)