双方向リストの 3 つの要素があり、2 つの操作があります:foo()
とbar()
.
いくつかのブール値フラグに基づいて、2 つの要素の最初の要素に対して操作 (if ) を実行し、残りの 1 つの要素に対して操作foo()
(if ) を実行する必要があります。true
bar()
false
したがって、これはきれいなコードですが、両方の要素に対して foo() を実行するため、間違っています。
while(head->next != NULL)
{
if(head->flag == true)
{
foo();
}
if(head->flag == false)
{
bar();
}
head = head->next;
}
リスト要素はランダムな順序で来る可能性があるため、A、C、B、または B、A、C になる可能性があります (どちらの場合も操作が必要な A と B としましょうfoo()
)。
私の問題は、A と B が最初に来る場合、両方で foo() 関数を呼び出すことです (上記のようにできません)。
実際、もう一度分析すると、どの場合でもこの関数が 2 回呼び出されることがわかります。
私が思いついた解決策は次のとおりです。
int flag = 0;
while(head->next != NULL)
{
if(head->flag == true && flag == 0)
{
foo();
flag = 1;
}
if(head->flag == false)
{
bar();
}
head = head->next;
}
しかし、コードは突然醜くなります。
フラグを使用せずにコードをきれいに保つ方法はありますか?