почему я получаю ноль вместо 1? - PullRequest
0 голосов
/ 08 марта 2020

Это программа поиска номера из связанного списка с использованием рекурсии.

#include <iostream> 

using namespace std; 

class node { 
public: 
    int data; 
    node *next; 

    void create(int *,int); 
    int max(node*,int); 
}; 

node *first; 

void node::create(int a[],int n) { 
    first = new node; 
    first->data = a[0]; 
    first->next = NULL; 
    node *last = first; 
    for (int i = 1; i < n; i++) {
        node *t = new node; 
        t->data = a[i]; 
        t->next = NULL; 
        last->next = t; 
        last = t; 
    }
} 

int node::max(node *l, int p) { 
    if (l->data == p) { 
        return 1;
    } 
    if (l == 0) 
        return 0; 
    else {  
        max(l->next, p); 
        return 0;
    }
} 

int main() { 
    int a[5] = {1,2,3,4,5}; 
    node m; 
    m.create(a,5); 
    cout << m.max(first, 3); 
    return 0; 
}

1 Ответ

0 голосов
/ 09 марта 2020

Hunch. Вместо этого:

else {  
    max(l->next, p); 
    return 0;
}

Это:

else {  
    return max(l->next, p); 
}

Или, что еще лучше, давайте исправим целую функцию max, чтобы проверять наличие нуля до разыменования l.

int node::max(node *l, int p) { 
    int result = 0;
    if (l != nullptr) {
       if (l->data == p) {
           result = 1;
       }
       else {
          result = max(l->next, p);
       }
    }
    return result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...