我在下面写了一个函数,它接受一个指向链表前端的指针,并确定该链表中的值是否按严格升序存储。如果是这种情况,函数应该返回1;否则它应该返回0。
struct listnode {
int data;
struct listnode* next;
};
int ascendingOrder(struct listnode* front) {
struct listnode* current = front;
if(current->data == NULL)
return current->data;
while(current->next != NULL) {
if(current->data < current->next->data)
return 1;
}
else
return 0;
}
}
这能行吗?如果不行,是怎么回事?
我看到一些事情看起来不太对。对于初学者来说,你的版本甚至无法编译。另外,如果第一项小于第二项,函数将返回。它甚至不检查其他项。
我更想这样做(未经测试)。
int IsAscending(struct listnode* node)
{
if (node == NULL)
return TRUE;
while(node->next != NULL)
{
if (node->data > node->next->data)
return FALSE;
node = node->next;
}
return TRUE;
}
这不起作用,因为您在比较前两个列表项后返回。你可以写上"继续";(或者留空)return 1所在的位置,然后将return 1放在程序末尾的while循环之外。这样,它只在遇到current> next点时返回0,而在没有发生这种情况的情况下遍历所有项时返回1。你的括号也关闭了,在返回1之后你有一个额外的。并且,您不能将当前节点更改为下一个节点,您必须在while循环的底部设置它。