C言語でノードを削除する方法は何ですか。
– C言語では、リストからノードを削除する方法はいくつかあります。
- リストの走査と削除:まずリストを走査し、削除するノードを見つけ、それを削除する直前のノードのポインタを削除するノードの次のノードに向け、その後、削除されたノードのメモリスペースを解放します。
void deleteNode(struct Node** head_ref, int key) {
struct Node* temp = *head_ref;
struct Node* prev = NULL;
if (temp != NULL && temp->data == key) {
*head_ref = temp->next;
free(temp);
return;
}
while (temp != NULL && temp->data != key) {
prev = temp;
temp = temp->next;
}
if (temp == NULL) {
return;
}
prev->next = temp->next;
free(temp);
}
- 双ポインタによる削除:現在のノードを指す1つのポインタと、現在のノードの直前のノードを指すもう1つのポインタを使用します。リストを走査し、削除する必要があるノードを見つけたら、直前のノードのポインタを現在のノードの次のノードを指すようにし、削除するノードのメモリ空間を解放します。
void deleteNode(struct Node** head_ref, int key) {
struct Node* temp = *head_ref;
struct Node* prev = NULL;
while (temp != NULL && temp->data != key) {
prev = temp;
temp = temp->next;
}
if (temp == NULL) {
return;
}
if (prev == NULL) {
*head_ref = temp->next;
} else {
prev->next = temp->next;
}
free(temp);
}
リンクリストからノードを削除する際には、ヘッドノードとテールノードの処理に注意を払う必要があり、削除されたノードのメモリ空間を解放し、メモリリークを防ぐことが重要です。