0

リンクされたリストで値が 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変更するため、出力は「空」になると思います。ただし、出力は.headNULL1

head私の質問は、ポインターへのポインターの機能が変わらない理由removeNodeです。すべての提案を歓迎します。

アップデート:

マイケルの返事をありがとう。修正する正しい方法head*head = prev、ではなく、 head = &prevです。

4

1 に答える 1

2
   head = &prev;

headではなく、あなたが変更し*headます。そして、あなたがそれに のアドレスを割り当てたいとは思いませんprev。残りはまだチェックしていません。

于 2013-10-20T19:34:39.100 に答える