我正在尝试使用最小值和最大值创建链接列表。这可能是一种非常愚蠢的方法,也许我应该使用 vector 来完成我想做的事情。

我在插入时遇到了很大的困难,我不知道为什么这不起作用,我已经投入了互联网,看了看我的书,但是没有任何东西能够使它起作用。也许是因为我使用的是智能指针,但我还没有100%的自信使用它们,但这是我的Node:

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;

}

希望能帮助到你。

关于c++ - 在C++中创建一个最小和最大范围为x和y的单链接列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39892093/

10-10 19:22