2017-03-11 31 views
1

這是我嘗試如何返回指向鏈表中最大值的指針?

// Return a pointer to node with the largest value. 
// You may assume list has at least one element 

Node * pointerToMax(LinkedList *list) { 

    assert(list!=NULL); 
    assert(list->head != NULL); 

    Node *p, *q; 
    p = list->head; 
    q = list->head; 
    int max = q->data; 

    while(p != NULL){ 
    if(p->data > max){ 
     max = p->data; 
    } 
    return p; 
    p = p->next; 
    } 
} 

這裏有結構的定義。

struct Node { 
    int data; 
    Node *next; 
}; 

struct LinkedList { 
    Node *head; 
    Node *tail; 
}; 

我試圖找出如何返回一個指向最大值的指針,但我不能確切地弄清楚如何指針返回變量max,我甚至不能確定如果max變量正在更新。

+1

您需要跟蹤「最大」(最大數據)及其對應的「節點」。然後返回一個指向'Node'的指針。就像這樣,你立即返回,而不是讓你的'while'循環有機會遍歷LL。 – bejado

+0

並沒有使用指針'q',並且return語句應該在while循環後面,牢記@bejado的建議 –

+0

您的當前代碼只會在您第一次看到數據大於頭節點。刪除while循環中的'return p'語句並將其放在while循環之後。 –

回答

5

你想是這樣的:

Node *maxNode = p; 
int max = p->data; 
while(p != NULL){ 
    if(p->data > max){ 
    max = p->data; 
    maxNode = p; 
    } 
    p = p->next; 
} 
return maxNode; 

沒有理由return在while循環。我們不知道什麼是最大Node,直到我們通過所有環路節點。