这是一个关于C++中列表的非常基本的问题。 我有一个结构metadata
,它具有prev
,next
和value
。 我有一个已按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. 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;
}