Моя функция неверна, и она не вернет Max Node, и я не уверен, почему - PullRequest
0 голосов
/ 16 апреля 2020

Здравствуйте, мне кажется, что мой код будет выполнен, но не будет возвращать узел max или что-то еще, что очень расстраивает, потому что я не могу понять это, если вам нужен дополнительный код, пожалуйста, спросите.

int LinkedList::maxNode(listNode *p)
{
    int current = p->val;
    int next;

    if (p->next == NULL) 
    {
        return current;
    }
    else 
    {
        next = maxNode(p->next);
    }
    if (current > next) {
        return current;
    }
    else {
        return next;
    }
}
int LinkedList::findMaxNode()
{
    return maxNode(head);
}

, что была функция, и это основной

case 'M':
case 'm':
Mylist.findMaxNode();
break;

, и это заголовочный файл, пожалуйста, не дайте мне ответ, просто покажите мне мою ошибку

class LinkedList
{
protected:
    struct listNode
    {
        struct listNode* next;
        double val;
    };
public:
    listNode* head;
    LinkedList();
    LinkedList(const LinkedList&);
    ~LinkedList();

    void appendNode(double);
    void insertNode(double);
    void insertNodeByPosistion(double, int);
    void deleteNodeByPosition(int pos);
    void destroyNode(double);
    void reverseList(listNode*);
    bool searchList(int);
    int maxNode(listNode *p);
    int findMaxNode();
    void displayList(listNode*);
    int operator[](int);
};

Ответы [ 2 ]

2 голосов
/ 16 апреля 2020

Не уверен, что вы планируете печатать позже после переключения в своей основной сети, но вы ничего не делаете со значением, когда найдете значение.

, вероятно, хотите сделать что-то вроде:

case 'M':
case 'm':
 std::cout << Mylist.findMaxNode() << std::endl;
break;

примечание, вы, вероятно, хотите сравнить указатель с nullptr вместо NULL. Взгляните на NULL против nullptr (Почему его заменили?)

0 голосов
/ 16 апреля 2020

Вы не используете возвращаемое значение из функции.

case 'M':
case 'm':
Mylist.findMaxNode();
break;

Для начала функция maxNode должна быть статической c функцией-членом и объявлена ​​в закрытом разделе класса. Это вспомогательная функция, которая вызывается под капотом функцией findMaxNode.

private:
    static int maxNode(listNode *p);

. В свою очередь, функция findMaxNode должна быть постоянной функцией-членом

int findMaxNode() const;

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

Предположим, что в этом случае функция возвращает 0.

Тогда функция может выглядеть следующим образом

int LinkedList::maxNode( const listNode *p )
{
    return listNode == nullptr ? 0 : std::max( { listNode->val, maxNode( listNode->next ) } );
}

Вам нужно будет включить заголовок

#include <algorithm>

Тогда вы можете написать, например,

case 'M':
case 'm':
    std::cout << "The maximum value is " << Mylist.findMaxNode() << '\n';
    break;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...