私はこれに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);