Я столкнулся с проблемой при попытке написать функцию копирования для моего списка пропуска. Поскольку большая часть класса уже выполнена, я бы предпочел не менять свой дизайн. Спасибо заранее!Пробелы в копировании Пропустить Список
Каждый узел имеет два указателя, один на следующий узел на одном уровне, а другой - на эквивалентный узел на один уровень ниже. В моем классе есть вектор, который хранит указатели на главный узел каждого уровня.
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
не кажется правильным, любой может получить некоторые предложения, как сделать эту работу?
Узнайте, как использовать отладчик, то вы можете пройти через код построчно контролируя переменные и как они меняют значения. Это должно помочь вам отладить собственный код и посмотреть, что он делает, и где и почему он делает неправильно. –
@Joachim Pileborg Хорошо, вы быстро, но ваш универсальный комментарий не имеет никакого смысла. –
Как выглядит конструктор 'Node'? Кроме того, «не сработает» не очень полезное описание проблемы. – molbdnilo