在链接列表中插入节点之前/之后

时间:2013-06-08 18:37:24

标签: c++ linked-list

我正在尝试根据数据成员的值在列表中插入节点。基本上,如果成员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);

等价地放在它之前?是否使用节点的“下一个”成员来定义放置位置,还是完全不同?

希望有人能清除我的疑虑,如果这看起来像个愚蠢的问题,那就很抱歉!谢谢!

1 个答案:

答案 0 :(得分:0)

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


它可以用更少的行来实现,没有明确的isEmpty检查,也没有任何计数器。如果使用标准容器,则更低。