我想将(简单链接)列表转换为从链接列表派生的跳过列表。
在转换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/

10-10 06:26