0

私はこれに10時間ほど取り組んできました。

int particle_remove(struct particle* p);

「削除するノード」の場所を関数に渡すときに、どうすれば頭を見つけることができますか?

そんなこと知ってる:

prev->next = curr->next;
free(curr);

(curr -1) までトラバースする頭の位置を見つけるにはどうすればよいですか?

これは私がこれまでに持っているものです:

int particle_remove(struct particle *p){

    struct particle *curr = p;
    struct particle *prev = *head; /* should point to the head */

    if (p != NULL){
        while (prev != curr){
            prev=curr->next;
        }

        prev->next = curr->next;
        free(curr);                
    }

    return 0;
}

私はこれを何百万回も繰り返してきましたが、ヘッド ノードの場所のパラメータを関数に渡さずに、ヘッド ノードに到達する方法が思いつきません。現在の関数「署名」でこれを行うことは可能ですか、それとも頭への参照を追加する必要がありますか?

OK 削除するノードに関数を使用するだけで機能するとは思わないため、破棄する現在のノードとヘッドへのポインターの両方を取る新しい関数を作成することでそれを理解しました。頭への言及。(誰かが私が間違っていることを証明できない限り、そうしてください!)

私は次のようなプロトタイプになりました: (ヒントを探している人のために)

 int particle_remove(struct particle *p, struct particle **head);
4

2 に答える 2

0

OK、元の関数プロトタイプを使用してこれを解決する方法は、次を使用する場合です。

if(p->next != NULL){
    /* do something */
}

次のノードを削除するかどうかを確認しています。これにより、前のノードと次のノード (削除される) にアクセスできます。

于 2013-11-06T16:19:18.687 に答える