提问者:小点点

如何在自定义排序列表中添加项目?


这是一个关于C++中列表的非常基本的问题。 我有一个结构metadata,它具有prevnextvalue。 我有一个已按value排序的块Metadatablock,我想在该列表中添加一个新块MetadatablockResult。 我所做的:

bool addedFlag = false;
Metadata* iterator = metadataBlock;
while (iterator != nullptr) {
    if (metadataBlockResult->getValue() < iterator->getValue()) {
        // What should be here?
        addedFlag = true;
        break;
    }
    iterator = iterator->getNext();
}

if (!addedFlag) {
    metadataBlockResult->setPrev(iterator);
    metadataBlockResult->setNext(nullptr);
    iterator->setNext(metadataBlockResult);
}

我似乎无法理解如何在两个项目之间添加该项目并处理所有情况(开始和结束)。 我应该如何添加该项目?


共1个答案

匿名用户

不要害怕用笔和纸把要实现的逻辑形象化:

下面是一些可能实现的伪代码:

// 1. Find the position to insert newNode

Node *before = nullptr, *after = startOfList;
while (after != nullptr && after->value < newNode->value) {
    before = after;
    after = after->next;
}

// 2. Splice newNode in between before and after

newNode->prev = before;
newNode->next = after;
if (before != nullptr) {
    before->next = newNode;
} else {
    startOfList = newNode;
}
if (after != nullptr) {
    after->prev = newNode;
}