【发布时间】:2017-07-11 06:33:15
【问题描述】:
我有一个简单的问题。我有一个 LinkList 类,并且在该类中启动了 root。
class LinkList {
struct node {
int data;
shared_ptr<node> next;
};
shared_ptr<node> root;
public:
void insert(int data);
void remove(int data);
void print();
int length();
bool search_recursive(int data);
bool search_recursiveUtil(shared_ptr<node> p, int data);
}
理想情况下,我想实现一个递归函数来搜索节点。现在我通过以下方式实现:
bool LinkList::search_recursiveUtil(shared_ptr<node> p, int data){
if(p == nullptr){
return false;
}
if(p->data == data){
return true;
}
return search_recursiveUtil(p->next, data);
}
bool LinkList::search_recursive(int data){
shared_ptr<node> p = root;
return search_recursiveUtil(p, data);
}
现在您可以清楚地看到,由于我不希望 root 到达链表的末尾,因为其他函数可能会使用这个头指针来做某事,所以我正在获取一个共享指针 P 并遍历它。现在我想让 p 传递给“search_recursive”函数,但由于它不接受 shared_ptr 参数,所以我不得不支持“search_recursiveUtil”函数。
我的问题是正确的方法吗?在没有 util 功能支持的情况下如何实现这一点?
【问题讨论】:
-
为什么要递归?递归解决方案几乎没有什么好处。这是令人难以置信的空间效率低下。
-
没什么问题,但我会以迭代的方式实现它,这样会更有效率。
-
另请注意,与通过 const red 支付相比,按值传递共享指针有相当多的开销(当然语义不同,但在您的情况下两者都可以)
-
我知道递归不是一种有效的方法,但我想尝试一下。
-
什么是迭代方式?你能解释一下,或者是一个示例代码吗?
标签: c++ shared-ptr smart-pointers