假设我有一个结构,我用作链接列表(单面),让我们说
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之前移动“索引”?
谢谢
答案 0 :(得分:0)
循环遍历s2
列表,如果当前节点包含s1
结构列表(firstfroms1
非空),则在继续之前循环它们。所以,循环内循环。
答案 1 :(得分:0)
你不能使用标准的链表semantincs来做到这一点,其中每个列表元素都能够为你提供下一个元素或null。当您对s1列表进行“侧分支”时,这些列表元素不知道它们属于s2,并且一旦到达列表末尾它们就不知道该怎么做。
您有两个嵌套列表的知识仅在s2中可用,因此您只能在s2上进行迭代。
但是,您必须返回s2元素。假设您在迭代时更新firstFromS1,则需要额外的取消引用操作来从当前s2元素获取当前s1元素,如*(some_S2.firstFromS1)
。