現在、C++ を使用したデータ構造に関する問題に取り組んでいます。単方向リストのノードが昇順でソートされているかどうかを確認します。ここに私のコードの詳細があります
Node.cpp
class Node
{
public:
double data;
Node* next;
};
問題が発生する部分については、
double preValue = sLL.head->data;
Node *curNode = sLL.head->next;
do
{
if (preValue > (preValue = curNode->data)) // Problem occur in this line
return false;
}while (curNode = curNode->next);
「>」演算子の評価の順序は、左側の式を評価してから右側の式を評価するためです。
と
代入演算子は左辺値の参照を返します。
したがって、preValue > (preValue = curNode->data)
最後のノードと現在のノードを比較し、比較が完了した後に次のノードのデータを割り当てる必要があります。したがって、私の実装は有効であるべきだと思います。
ただし、 の結果は予想外です。 new よりも大きいif(preValue > (preValue = curNode->data))
a を比較すると、常に false が返されます。preValue
preValue
if ステートメントの戻り値を出力しようとしましたが、左の式が右の式より大きいか小さい場合は常に 0 を返します。なぜこれが起こるのか理解できません。誰が私が犯した間違いを教えてもらえますか?
psプログラムは次の実装で正常に動作します
double preValue = list.head->data;
Node *curNode = list.head->next;
do
{
if (preValue > curNode->data) // Check ascending order
return false;
preValue = curNode->data;
}while (curNode = curNode->next);