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'は '' name''のポイントを変更しないので、 '' const char * name''でなければなりません。 – ikegami