我正在尝试根据数据成员的值在列表中插入节点。基本上,如果成员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);
等价地放在它之前?是否使用节点的“下一个”成员来定义放置位置,还是完全不同?
希望有人能清除我的疑虑,如果这看起来像个愚蠢的问题,那就很抱歉!谢谢!
答案 0 :(得分:0)
在 next 节点设置isVip
(current->next->isVip
)时,只需遍历列表。在迭代之后,访问的最后一个节点将是设置了isVip
的最后一个节点,您应该在该节点之后插入新节点。
它可以用更少的行来实现,没有明确的isEmpty
检查,也没有任何计数器。如果使用标准容器,则更低。