Null Object Pattern в двусвязном списке

Я пытаюсь использовать шаблон нулевого объекта в двусвязном списке в c ++, но я не могу найти способ использовать его, сохраняя код чистым.

Проблема заключается в следующем фрагменте кода:

node->getNext()->setPrevious(node->getPrevious());
node->getPrevious()->setNext(node->getNext());

getNext а также getPrevious вернет NullNode объект, если следующий / предыдущий узел nullptr,

Случай использования, когда это не удается — когда узел является головным узлом:

Следующее установит предыдущий указатель 2-го узла на объект NullNode, вызывающий утечку памяти.

node->getNext()->setPrevious(node->getPrevious());

То, что я пытаюсь сделать здесь, это сохранить NOP и сохранить код в чистоте от nullptr и сравнение типов классов,

Любые предложения будут очень благодарны!

0

Решение

Все будет проще, если вы сохраните узел предыдущий и следующий, что-то вроде этого:

Node* Detach( Node* node) {
auto prev = node->getPrevious();
auto next = node->getNext();
prev->setNext( next );
next->setPrevious( prev);

node->setNext( nullNodeAddr);
node->setPrevious( nullNodeAddr);

return node;
}

Шаблон NOP или Sentinel — это способ упростить операции, чтобы никогда не заботиться о нулевом значении в начале и в конце списка. Если вам нужно где-то проверить это, вы потерпите неудачу.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]