C++ 链表到 skiplist 转换

c++ linked list to skiplist conversion

本文关键字:转换 skiplist 链表 C++      更新时间:2023-10-16

我想将一个(简单链接的(列表转换为一个从链表派生的skiplist。在转换 ctor 中,它得到一个(链接(列表作为参数,我在 * 处得到一个堆栈溢出。我只是从主要调用一次 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 for object ,你会得到一个无限循环(实际上是无限递归(,导致不再有堆栈空间。