我目前正在处理有关使用 C++ 的数据结构的问题。我将检查单链表中的节点是否按升序排序。这是我的代码的一些细节
节点.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)
应该比较最后一个节点和当前节点,比较完成后分配下一个节点的数据。因此,我认为我的实现应该是有效的。
但是,结果if(preValue > (preValue = curNode->data))
超出了我的预期,当比较preValue
大于 new的 a 时preValue
,它一直返回 false。
我试图打印出 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);