2013-12-22 2 views
0

Предположим, у меня есть структуру, которая я использую в качестве связного списка (один сторонний), позволяет сказатьЗапуск на связанный список внутри связанного списка в C

struct s1 
{ 
    char *word; 
    struct s1 *next; 
}; 

Теперь сделайте другой структуру, которая также должна быть связанный список, который имеет первый:

struct s2 
{ 
    int b; 
    struct s1 *firstfroms1; 
    struct s2 *next; 
} 

в моей программе, я хочу работать на s2, но в нем я хочу работать на всех элементах, которые firstfroms1 приводит к. Например, если список из s2 заканчивается через 2 раза, а первый имеет 4 элемента из s1, я хочу запустить эти четыре.

Проблема в том, что когда я пишу list-> firstfroms1-> word, я могу получить доступ только к первому из s1. Как я могу переместить этот «индекс», пока не достигню NULL в s1?

Благодаря

ответ

0

Loop по списку s2, если текущий узел содержит список s1 структур (firstfroms1 является ненулевым) затем цикл над ними, прежде чем продолжить. Итак, цикл в цикле.

0

Вы не можете сделать это, используя стандартный связанный список semantincs, где каждый элемент списка способен предоставить вам следующий элемент или null. Когда вы являетесь «боковым ветвлением» в список s1, эти элементы списка не имеют понятия, что они принадлежат s2, и они не знали, что делать после достижения конца списка.

Знание того, что у вас есть два вложенных списка, доступно только в s2 и, следовательно, вы можете выполнять только итерацию по s2.

Однако, тогда вы должны вернуть элементы s2. Вам понадобится дополнительная операция разыменования, чтобы получить текущий элемент s1 из текущего элемента s2 примерно как *(some_S2.firstFromS1), предполагая, что вы обновляете firstFromS1 при повторении.

Смежные вопросы