Я работал над связанным списком, и я должен был сделать функцию вставки. Список создается из файла, содержащего имя и оценку ученика, и в порядке сортировки, с первой попытки я вставляю новый узел, это нормально, но вторая попытка делает новый узел указывать на себя, а не указывать на нуль или на узел в который он был вставлен раньше. Я не могу найти, где строка, которая заставляет узел указывать на себя, пока это не происходит с первой попытки!Связанный список: Вставить точки функции в себя после второй вставки
typedef struct student
{
char name[20];
int score;
struct student *next;
} Student_Data_Type;
Student_Data_Type *insert(Student_Data_Type *head, Student_Data_Type *p)
{
if(head == NULL)//if the head is empty then create list
{
head = Readfromfile(head);
}
Student_Data_Type *bufferStack = head;
Student_Data_Type *prev;
prev = malloc(sizeof(Student_Data_Type));
bool inserted = false;
while(bufferStack->next != NULL &&
strcmp(bufferStack->next->name, p->name) < 0)
{
bufferStack = bufferStack->next;
}
p->next = bufferStack->next;
bufferStack->next = p;
printf("[####] ADDED %s %d\n",bufferStack->next->name, bufferStack->next->score);//Second try says pointing to the same node
prev = bufferStack->next;
printf("[##] AND IS POINTING TO %s %d\n", prev->next->name, prev->next->score);
inserted = true;
return head;
}
Вот выход как в первом и второй вставке: -
//This is the initial list created from the file
[###] DISPLAYING NAMES AND SCORE OF STUDENTS:-
[###] ChenZhiheng <-----> 67
[###] GaoSuxiang <-----> 89
[###] MaQianli <-----> 90
[###] ZhangCheng <-----> 95
1.create list(read from file)
2.display all records
3.insert a record
4.delete a record
5.query
0.exit
//INSERT ONE
[###]ENTER NAME PLZ: Noor
[###] ENTER SCORE: 88
[####] ADDED Noor 88
[##] AND IS POINTING TO ZhangCheng 95
1.create list(read from file)
2.display all records
3.insert a record
.......
//NOW DISPLAYING THE LIST AFTER INSERTING:-
[###] DISPLAYING NAMES AND SCORE OF STUDENTS:-
[###] ChenZhiheng <-----> 67
[###] GaoSuxiang <-----> 89
[###] MaQianli <-----> 90
[###] Noor <-----> 88
[###] ZhangCheng <-----> 95
1.create list(read from file)
......
//THEN THE SECOND INSERT TRY
[###]ENTER NAME PLZ: Layla
[###] ENTER SCORE: 90
[####] ADDED Layla 90
[##] AND IS POINTING TO MaQianli 90
1.create list(read from file)
......
//THEN I CALL MY DISLAY FUNCTION AGAIN AND THIS IS THE OUTPUT:
[###] DISPLAYING NAMES AND SCORE OF STUDENTS:-
[###] ChenZhiheng <-----> 67
[###] GaoSuxiang <-----> 89
[###] Layla <-----> 90
[###] MaQianli <-----> 90
[###] Layla <-----> 90
[###] MaQianli <-----> 90
[###] Layla <-----> 90
[###] MaQianli <-----> 90
[###] Layla <-----> 90
[###] MaQianli <-----> 90
....AND FOREVER LOOP,...
//HERE IS MY DISPLAY FUNCTION
void DisplayAll(Student_Data_Type *head)
{
Student_Data_Type *stackbuffer = head;
printf("[###] DISPLAYING NAMES AND SCORE OF STUDENTS:- \n");
while(stackbuffer != NULL)
{
printf("[###] %s <-----> %d\n", stackbuffer->name, stackbuffer->score);
stackbuffer = stackbuffer->next;
}
}
Я уточню вопрос для получения дополнительной информации об ошибке. –
Я удалил превью и вставке, все равно никаких изменений @ paul-ogilvie –
Должно быть что-то не так в остальной части вашего кода, поскольку он вставляет, кажется, corect. –