此函数为循环链表创建一个新节点,如下所示:
Node *newNode(int data)
{
Node *temp = new Node;
temp->next = temp;
temp->data = data;
}
但是,我收到编译器的警告。我知道它应该有一个返回值,但不确定实现它的正确方法。我将不胜感激有关此的任何帮助。
定义如下:
Node *newNode(int data)
您的函数应返回 Node 指针。但是,您的实现没有这样的回报。编译器会警告您此问题。先验地,您可以通过以下方式解决问题:
Node *newNode(int data)
{
Node *temp = new Node;
temp->next = temp;
temp->data = data;
return temp;
}
注意:这是一个非常严重的问题,您必须修复代码,否则您将遇到未定义的行为。
>Node *newNode(int data)
意味着这个函数必须返回一个Node*
,但它没有,这会导致未定义的行为。您可能打算在函数末尾添加return temp
。否则无论如何你都会泄漏内存。
修复:
Node *newNode(int data)
{
Node *temp = new Node;
temp->next = temp;
temp->data = data;
return temp;
}
要实际修复此函数,请考虑使用智能指针,以便有人明确且显式地拥有堆分配的对象:
#include <memory>
struct Node {
Node* next;
int data;
};
[[nodiscard]] auto newNode(int const data) {
auto temp = std::make_unique<Node>();
temp->next = temp.get();
temp->data = data;
return temp;
}