リンクされたリストで値が N であるノードを削除したいと考えています。以下は、私が書いた連結リストと削除機能の定義です。
typedef struct LinkedList {
int val;
struct LinkedList *next;
} LinkedList;
void removeNode(int val, LinkedList **head) {
LinkedList *prev = *head;
while (prev && prev->val == val)
prev = prev->next;
head = &prev;
if (*head == NULL)
return;
// other stuff
}
この関数でポインターへのポインターが機能するかどうかをテストするために、次の関数を作成しました。
int main() {
LinkedList root;
root.val = 1;
root.next = NULL;
LinkedList *head = &root;
removeNode(1, &head);
if (head == NULL)
printf("%s\d", "Empty");
else
printf("%d\n", head->val);
return 0;
}
関数がへのポインターをremoveNode
変更するため、出力は「空」になると思います。ただし、出力は.head
NULL
1
head
私の質問は、ポインターへのポインターの機能が変わらない理由removeNode
です。すべての提案を歓迎します。
アップデート:
マイケルの返事をありがとう。修正する正しい方法head
は*head = prev
、ではなく、
head = &prev
です。