2017-03-11 39 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,直到我们通过所有环路节点。