2011-05-05 54 views
0

我已經編寫了一個函數,它將一個指針指向鏈表的前面,並確定該列表中的值是否嚴格按升序存儲。如果是這種情況,該函數應該返回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; 

    } 
} 

請問這個工作,如果不是怎麼回事?

+1

該代碼段甚至沒有編譯。有一個'else'沒有相應的'if'。 – pmg 2011-05-05 21:27:56

+1

同時檢查單個節點的列表:) – pmg 2011-05-05 21:28:53

+0

我編輯了代碼,但我不確定我是否做出了正確的更正 – kachilous 2011-05-05 21:30:27

回答

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

這樣做是有道理的。謝謝。 – kachilous 2011-05-05 21:45:37

+1

+1 ...但「嚴格」位呢?列表1 - > 2 - > 2 - > 3'不是嚴格遞增的。 – pmg 2011-05-05 21:51:02

+0

@pmg:我不清楚OP在這裏想要什麼。當然,如果你想知道你如何描述你可以改變從'>'到'> ='的比較。 – 2011-05-05 21:53:15

0

這不起作用,因爲您在比較前兩個列表項後返回。你可以把「繼續」 (或者讓它保持空白)返回1,然後在程序結束時在while循環外面放置return 1。這樣它只返回0,如果它運行到current> next的點,並且返回1,如果它通過沒有發生的所有項目。你的括號也是關閉的,你在返回1之後有一個額外的括號,並且你沒有把當前節點改變到下一個節點,你必須在while循環的底部設置它。