我在下面编写了一个函数,它接受一个指向链表前面的指针,并确定该列表中的值是否以严格的升序存储。如果是这种情况,函数应返回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;
}
}
这会起作用,如果不是,怎么来?
答案 0 :(得分:3)
我看到一些看起来不正确的事情。首先,你的版本甚至不会编译。此外,如果第一项小于第二项,则函数返回。它甚至不检查其他项目。
我会做更像这样的事情(未经测试)。
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;
}
答案 1 :(得分:0)
这不起作用,因为您在比较前两个列表项后返回。你可以把“继续” (或者只是留空)返回1的位置,然后在程序结束时将while返回1。这样,如果它遇到当前&gt;的点,它只返回0。如果没有发生,则返回1并返回1。你的括号也是关闭的,你在返回1之后还有一个额外的括号。并且你永远不会将当前节点更改为下一个节点,你必须在while循环的底部设置它。