Функция связанного списка, которая определяет, находятся ли значения в строго возрастающем порядке - PullRequest
0 голосов
/ 06 мая 2011

Ниже я написал функцию, которая берет указатель на начало связанного списка и определяет, хранятся ли значения в этом списке в строго возрастающем порядке. Если это так, функция должна вернуть 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 ]

3 голосов
/ 06 мая 2011

Я вижу несколько вещей, которые выглядят неправильно.Для начала, ваша версия даже не скомпилируется.Кроме того, если первый элемент меньше, чем второй, ваша функция возвращается.Он даже не проверяет другие элементы.

Я бы сделал что-то еще подобное (не проверено).

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;
}
0 голосов
/ 06 мая 2011

Это не сработает, потому что вы возвращаетесь после сравнения первых двух элементов списка. Вы можете поставить «продолжить»; (или просто оставьте это поле пустым), где ваш return 1, затем поместите return 1 вне цикла while в конце программы. Таким образом, он возвращает только 0, если сталкивается с точкой, где current> next, и возвращает 1, если он проходит через все элементы без этого. Кроме того, ваши скобки сняты, у вас есть дополнительный сразу после возврата 1. И вы никогда не меняете текущий узел на следующий, вы должны установить его в нижней части цикла while.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...