一个我正在苦苦挣扎的有关C ++列表的真正基本问题。我有一个Metadata
,prev
和next
的结构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);
}
我似乎不明白如何在两个项目之间添加项目并处理所有情况(开始和结束)。我应该如何添加项目?
答案 0 :(得分:0)
不要害怕用笔和纸来可视化要实现的逻辑:
以下是一些可能的实现的伪代码:
// 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;
}