链表函数,确定值是否按严格升序排列



我在下面写了一个函数,它接受一个指向链表前端的指针,并确定该链表中的值是否按严格升序存储。如果是这种情况,函数应该返回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循环的底部设置它。

相关内容

  • 没有找到相关文章

最新更新