在c++中创建具有x和y最小和最大范围的单链表

Creating a singly linked list with an x and y minimum and maximum range in C++

本文关键字:单链表 范围 链表 创建 c++      更新时间:2023-10-16

我试图使用最小值和最大值创建一个链表。这可能是一种非常愚蠢的方法,也许我应该使用向量来完成我想要做的事情。

我有一个非常困难的时间插入,我不知道为什么这是不工作,我倒了互联网,看了看我的书,但没有得到这个工作。也许是因为我正在使用智能指针,我还没有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;
}