我的函数是错误的,它不会返回最大节点,我不知道为什么



你好,所以我的代码似乎会执行,但不会返回最大节点或任何东西,非常令人沮丧,因为我似乎不知道这一点,如果你需要额外的代码,请询问。

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);
};

不确定您是否计划稍后在main中切换后打印,但当您找到值时,您没有对该值执行任何操作。

可能是想做一些类似的事情:

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

附带说明,您可能希望将指针与nullptr而不是NULL进行比较。看看NULL与nullptr(为什么被替换?(

您不使用函数的返回值。

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

首先,函数maxNode应该是一个静态成员函数,并在类的私有部分中声明。它是函数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;

相关内容