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