Я отправил вопрос несколько дней назад о связанном списке в C. Я думал, что все в порядке, тогда профессор пишет нам по электронной почте, что вместо этой подписи:
int insert_intlist( INTLIST* lst, int n); /* Inserts an int (n) into an intlist from the beginning*/
Он случайно имел в виду:
int insert_intlist( INTLIST** lst, int n); /* Inserts an int (n) into an intlist from the beginning*/
Теперь я подумал, что у меня есть указатель на указатель, и я могу переместить указатель за пределы main, а когда я вернусь к main, у меня все еще будет полный список связанных ссылок.
Он начинает с того, что дает нам:
INTLIST* init_intlist( int n )
{
INTLIST *lst; //pointer to store node
lst = (INTLIST *)malloc(sizeof(INTLIST)); //create enough memory for the node
lst->datum = n; //set the value
lst->next = NULL; //set the pointer
return lst; //return the new list
}
Что просто инициализировать список, как в main:
if (lst==NULL)
lst = init_intlist(i);
else
insert_intlist(lst, i);
lst имеет тип INTLIST *, поэтому он определен как INTLIST * lst. Поэтому я читаю некоторые цифры из текстового файла, например, 1 3 4 9.
Предполагается создать связанный список из этого ... поэтому первое число будет идти к init_intlist (1); И это было определено выше. Затем он получает следующий номер 3 в этом случае и вызывает insert_intlist (lst, 3). Ну вот мой insert_intlist, и все, что я хочу сделать, это вставить в начало списка:
int insert_intlist(INTLIST** lst, int n )
{
INTLIST* lstTemp; //pointer to store temporary node to be added to linked list
lstTemp = (INTLIST *)malloc(sizeof(INTLIST)); //create enough memory for the node
lstTemp->datum = n; //assign the value
//check if there is anything in the list,
//there should be, but just in case
if(*lst == NULL)
{
*lst=lstTemp;
lstTemp->next=NULL;
}
else
{
lstTemp->next = *lst; //attach new node to the front
*lst = lstTemp; //incoming new node becomes the head of the list
}
return 0;
}
Так что, если бы список содержал 1, изначально эта функция просто создала бы новый узел, а затем сделала бы этот временный узел-> следующей точкой к началу списка (который я считал первым), а затем переназначила заголовок списка на этот новый временный узел.
Все выглядит так, как будто работает правильно, но когда я пытаюсь вывести свой список на экран, он печатает только номер 1.
Кто-нибудь знает, что я делаю не так?