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

时间:2020-06-27 12:26:53

标签: c++ list

一个我正在苦苦挣扎的有关C ++列表的真正基本问题。我有一个Metadataprevnext的结构value。我有一个区块metadataBlock,该区块已按value排序,我想在该列表中添加一个新区块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 个答案:

答案 0 :(得分:0)

不要害怕用笔和纸来可视化要实现的逻辑:

insert into doubly-linked list

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

// 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;
}