0
指示:执行以下功能按姓氏搜索,然后从链接列表中删除第一个匹配的学生。如果找到了匹配的学生,该函数返回一个指向新链接列表头的指针;如果找不到匹配的学生,则该列表不变,并返回链接列表的头部。根据匹配的数据删除节点
编译并运行该代码时,每次只删除头节点。即使名称在列表中间或根本不在列表中,始终删除头节点。不确定发生了什么问题。任何帮助将不胜感激!谢谢!
STUDENT *DeleteByLastName(STUDENT *students, char *name)
{
struct STUDENT* current = students;
struct STUDENT* previous = NULL;
while (current != NULL) {
if (current->Lastname == name) {
if (previous == NULL) {
current = current->Next;
free(students);
students = current;
}
else {
previous->Next = current->Next;
free(current);
current = previous->Next;
}
}
else {
previous = current;
current = current->Next;
}
return current;
}
return NULL;
}
'current-> Lastname == name' - 这不是比较字符串的方式。使用'strcmp'家族。这使我怀疑你在没有显示的功能中有类似的问题... –
提示; 'char * name'应该是'const char * name',因为你不会修改'name'指向哪个。 – ikegami