Cのリンクキュー構造から要素を削除するために、このリンクされたキューコードが与えられました。通常はこれを別に実装しますが、このコードは再帰を使用しています。それは、それがやるべきことをするのだろうか、なぜですか?それができない場合は、修正する方法はありますか?私はこの再帰的な事に対して本当に新しいです。ありがとう!Cで再帰的にリンクされたキューから削除
typedef struct telement T;
struct telement{
int value;
T* next;
};
void Out (T **A){
if ((*A)->next == NULL){
printf("\n --I'm removing element with value %d.---", (*A)->value);
(*A) = NULL;
free(*A);
}
else{
Out(&(*A)->next);
}
}
どうすればよいですか?それがコーヒーを作ることになっているなら、それはそれをしません。 – immibis
@immibisフォワードリンクリストの最後のノードまで再帰的に移動し、そのノードを指しているポインタをNULLに設定し、ヌルポインタを解放してメモリをリークします。要するに、可能な限り最小限の*効率的な方法でタスクを実行することは、再帰とポインターツーポインターの使用法です。また、空の(ヌルポインター)キューで実行されるとき、未定義の動作を呼び出すことも保証されています。 – WhozCraig
@WhozCraigそれは私が尋ねたものではありません。私のコメントを読んでください。 – immibis