スキップ リストのコピー関数を作成しようとしているときに問題が発生しました。クラスのほとんどはすでに完了しているので、デザインを変更したくない.
各ノードには 2 つのポインタがあり、1 つは同じレベルの次のノードへのポインタで、もう 1 つは 1 レベル下の同等のノードへのポインタです。私のクラスには、各レベルのヘッド ノードへのポインタを格納するベクトルがあります。
struct Node
{
int key;
Node* next;
Node* below;
}
vector<Node*> levels;
私のプライベートコピー機能:
void copyAll(const SkipList& s)
{
for(unsigned int i = 0; i < s.level.size(); ++i)
{
Node* curr = s.level[i];
Node* copy = new Node(curr->key, nullptr, curr->below);
level.push_back(copy);
curr = curr->next;
while(curr != nullptr)
{
copy->next = new Node(curr->key, nullptr, curr->below);
copy = copy->next;
curr = curr->next;
}
}
}
この関数は、すべての単一ノードがコピーされて相互にリンクされている状態で水平方向に正常に機能しますが、垂直方向のリンクは設定しません。
curr->below
誰でもこれを機能させる方法についていくつかの提案を得ることができますか?