在 C++ 中创建具有 x 和 y 最小和最大范围的单链表
Creating a singly linked list with an x and y minimum and maximum range in C++
我正在尝试使用最小值和最大值创建链表。这可能是一种非常愚蠢的做法,也许我应该使用向量来完成我想做的事情。
我很难插入,我不知道为什么这行不通,我上网查了资料,看了看我的书,但没有任何办法让它起作用。可能是因为我正在使用智能指针,但我对使用它们还不是 100% 有信心,但这是我的节点:
struct Node
{
Node(int m = 0, int M = 0, std::shared_ptr<Node> r = nullptr) : min(m), max(M), right(r){}
std::shared_ptr<Node> right;
int min;
int max;
};
我相信这设置正确,但这是我的插入函数,我确定这就是问题所在。而且我不确定这是否应该是一个 void 函数,或者它是否应该是一个 std::shared_ptr
std::shared_ptr<Node> Container::insert(std::shared_ptr<Node> list, int min, int max)
{
if(!list)
{
list = std::make_shared<Node>(min, max);
}
list->right = insert(list->right, min, max);
return list;
}
我有点不知所措,也许我对问题的理解还不够透彻。基本上,我只想比较最小值和最大值。同样,这可能是我解决问题的一种非常糟糕的方式。
通过添加递归的基本情况更正了代码。
std::shared_ptr<Node> Container::insert(std::shared_ptr<Node>& list, int min, int max)
{
if(!list)
{
list = std::make_shared<Node>(min, max);
}else{
list->right = insert(list->right, min, max);
}
return list;
}
希望对您有所帮助。
你正在无条件递归,所以永远不会终止。
假设要在list
的末尾插入一个新节点,大概应该是
std::shared_ptr<Node> Container::insert(std::shared_ptr<Node> list, int min, int max)
{
if(!list)
{
list = std::make_shared<Node>(min, max);
}
else
{
list->right = insert(list->right, min, max);
}
return list;
}
我正在尝试使用最小值和最大值创建链表。这可能是一种非常愚蠢的做法,也许我应该使用向量来完成我想做的事情。
我很难插入,我不知道为什么这行不通,我上网查了资料,看了看我的书,但没有任何办法让它起作用。可能是因为我正在使用智能指针,但我对使用它们还不是 100% 有信心,但这是我的节点:
struct Node
{
Node(int m = 0, int M = 0, std::shared_ptr<Node> r = nullptr) : min(m), max(M), right(r){}
std::shared_ptr<Node> right;
int min;
int max;
};
我相信这设置正确,但这是我的插入函数,我确定这就是问题所在。而且我不确定这是否应该是一个 void 函数,或者它是否应该是一个 std::shared_ptr
std::shared_ptr<Node> Container::insert(std::shared_ptr<Node> list, int min, int max)
{
if(!list)
{
list = std::make_shared<Node>(min, max);
}
list->right = insert(list->right, min, max);
return list;
}
我有点不知所措,也许我对问题的理解还不够透彻。基本上,我只想比较最小值和最大值。同样,这可能是我解决问题的一种非常糟糕的方式。
通过添加递归的基本情况更正了代码。
std::shared_ptr<Node> Container::insert(std::shared_ptr<Node>& list, int min, int max)
{
if(!list)
{
list = std::make_shared<Node>(min, max);
}else{
list->right = insert(list->right, min, max);
}
return list;
}
希望对您有所帮助。
你正在无条件递归,所以永远不会终止。
假设要在list
的末尾插入一个新节点,大概应该是
std::shared_ptr<Node> Container::insert(std::shared_ptr<Node> list, int min, int max)
{
if(!list)
{
list = std::make_shared<Node>(min, max);
}
else
{
list->right = insert(list->right, min, max);
}
return list;
}