我想将(简单链接)列表转换为从链接列表派生的跳过列表。
在转换ctor里面,它获得一个(链表)列表作为参数,我在*处得到了stackoverflow。
我只从主叫那个ctor一次。新的SkipList如何被循环调用?
class SkipList : public List {
public:
SkipList(SkipListEl* first) : List (first){};
SkipList(const List& sl){
ListEl* fst = sl.getFirst();
new SkipList(fst); // * <- stackoverflow
while(fst->hasNext()){
new SkipListEl(*fst);
fst = fst->getNext();
}
};
最佳答案
您需要检查有关动态对象创建的基本C ++规则。 new
调用要创建的对象的构造函数。通过在new object
的构造函数中调用object
,您将得到一个无限循环(实际上是无限递归),导致不再有堆栈空间。
关于c++ - C++链表到skiplist的转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10659104/