Я отправил вопрос несколько дней назад о связанном списке в C. Я думал, что все в порядке, тогда профессор пишет нам, что вместо этой подписи :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*/
Я подумал про себя круто теперь, когда у меня есть указатель на указатель можно переместить указатель за пределы основной и когда я вернусь в основной я буду по-прежнему иметь мой полный список.
Он начинается с давая нам это:
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
}
Что просто инициализировать список как и в основной:
if (lst==NULL)
lst = init_intlist(i);
else
insert_intlist(lst, i);
LST имеет тип IntList * поэтому его определяется как IntList * местное стандартное время Поэтому я читаю некоторые цифры из текстового файла, такого как 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 первоначально эта функция будет просто создать новый узел, а затем сделать этот темп node-> следующий пункт в голову списка (который, как я думал, был lst), а затем переназначить головку списка на этот новый временный узел.
Все это выглядит, как он работает право, но когда я пытаюсь напечатать мой список на экране он только печатает номер 1.
Кто-нибудь есть какие-либо подсказки относительно того, что я делаю не так?
Не очень полезно, но вы считаете, что удушаете своего профессора? :) – Skurmedel
Без комментариев ... (15 символов) – oJM86o
Я думаю, вы должны дать своему профессору неудачный класс! –