2013-03-01 5 views
0

Я пытаюсь создать небольшой список для каждого элемента в основном списке. У меня есть главный список, прекрасно работающий, но я не знаю, как получить доступ и добавить элементы в маленький список.Добавление элементов в связанный список внутри связанного списка в C

struct smallList 
{ 
    char data; 
    struct smallList *next; 
}; 

struct bigList 
{ 
    char data; 
    struct bigList *next; 
    struct smallList *head; 
} *root; 

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

newNode->head = NULL; 

Я использую эту функцию, чтобы получить текущий указатель на элемент в основном списке:

struct bigList *pointer = getPointer(root, value); 

Затем, чтобы добавить материал в его smallList| using that pointer. I pass along указатель-> head` для этой функции. И это не работает.

insert(pointer->head, value) 
+0

Узнайте, как передать указатель * по указателю * (то есть указатель на указатель). – WhozCraig

ответ

0

Как советует WhozCraig, вы можете решить вашу проблему, указав указатель на указатель. Что-то вроде этого:

void insert(struct smallList **head, char value) 
{ 
    *head = newSmallList(value, *head); 
} 

newSmallList будет что-то вроде:

struct smallList *newSmallList(char value, struct smallList *rest) 
{ 
    struct smallList *result = malloc(sizeof(struct smallList)); 
    result->next = rest; 
    result->data = value; 
    return result; 
} 

Проблемы с вашей текущей установкой является то, что вы передаете значения из pointer-> областей голов (что случается be null) к функции, когда вы хотите изменить то, что хранится в поле. Вот программа, использующая целые числа, которые иллюстрируют аналогичную ошибку:

void setFive(int i) 
{ 
    i = 5; 
} 

int main(void) 
{ 
    int myInt = 7; 
    setFive(myInt); 
    printf("%d\n", myInt); /* still 7! */ 
    return 0; 
} 
Смежные вопросы