Я пытаюсь вставить узлы в список на основе значения элемента данных. В принципе, если член isVip
оценивает значение true, этот узел получает приоритет и должен быть вставлен перед любым обычным узлом (но за любыми существующими VIP-узлами). Регулярные узлы просто добавляются в конце списка.Вставка до/после узла в связанном списке
Я уверен, что у меня есть хорошая идея, как использовать два указателя для перехода по списку и вставить элементы для n> 2, где n - количество текущих членов списка, но я как бы концептуально застрял для случая, когда есть только один узел.
Вот моя рабочая версия кода ниже:
void SelfStorageList::rentLocker(Locker e) {
int count = 0;
LockerNode *p = head;
if (isEmpty()) {
head = new LockerNode(e);
tail = head;
}
for(;p!=0;count++, p=p->next) {
if(count == 1) {
if (e.isVip) {
if(p->objLocker.isVip) {
LockerNode*p = new LockerNode(e, p->next);
}
}
}
}
Как вы можете видеть, я проверяю, чтобы увидеть, если передаваемый в объект является VIP, а затем ли текущий один. Здесь я столкнулся с некоторыми неприятностями. Предполагая, что оба VIP, будет эта строка:
LockerNode*p = new LockerNode(e, p->next);
поставил переданному в объекте шкафчика в нужном месте (то есть после того, как текущий VIP один). Если да, то:
LockerNode*p = new LockerNode(e, p);
аналогичным образом разместить его раньше? Является ли использование или отсутствие «следующего» члена узла, что определяет место размещения, или это что-то совсем другое?
Надеюсь, что кто-то может очистить мои сомнения, и извините, если это кажется глупым вопросом! Благодаря!
Вы должны изменить 'p-> next' где-нибудь. Как выглядит конструктор 'LockerNode (e, p)'? – Inspired
Вы действительно хотите передать аргумент 'Locker' * по значению *? Это означает, что это будет * копия *. Вы должны подумать о передаче его по ссылке (или как указатель). –
Нет, значение должно быть прекрасным. Я в порядке с копиями, но спасибо за предложение. –