0

我正在尝试根据数据成员的值在列表中插入节点。基本上,如果成员isVip评估为真,则该节点获得优先权,并且应该插入到任何常规节点之前(但在任何现有 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);

相当于把它放在前面?节点的“下一个”成员的使用或不存在定义了放置位置,还是完全不同的东西?

希望有人能解决我的疑问,如果这似乎是一个愚蠢的问题,我很抱歉!谢谢!

4

1 回答 1

0

只需在下一个节点已isVip设置 ( current->next->isVip)时遍历列表。迭代后,最后访问的节点将是最后一个isVip设置的节点,您应该在该节点之后插入新节点。


它可以在更少的行中实现,无需显式isEmpty检查,也无需任何计数器。如果您使用标准容器,则甚至更少。

于 2013-06-08T18:41:26.930 回答