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

时间:2011-05-05 21:26:22

标签: c linked-list

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

     } 
 }

这会起作用,如果不是,怎么来?

2 个答案:

答案 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循环的底部设置它。