Трудно сказать в целом. Кажется, что вы хотите переместить элемент 4 после элемента 1. У вас есть index*
для обоих? Или вы просто знаете, что четвертый элемент должен двигаться на два места? Это, очевидно, влияет на количество переписчиков, которые вы должны делать.
В целом, для достижения максимальной эффективности, вы хотите функцию
void list_remove_unsafe_(index* i) {
// These two have to change (minimum needed)
i->previous_element->next_element = i->next_element;
i->next_element->previous_element-> = i->previous_element;
// We leave i itself unchanged (dangling)
}
и последующей деятельности
void list_insert_unsafe_(index* after, index* i) {
// These four have to change (minimum needed)
index* before = after->next_element;
i->previous_element = after;
i->next_element = before;
before->previous_element = i;
after->next_element = i;
}
Эти операции являются опасными, поскольку они временно покидают список в поврежденном состоянии и сделать много предположений (например, проверить начало/конец списков). Им нужна специальная обработка. Для основной операции эти 6 указателей записываются как минимум.
Каков твой критерий в зависимости? Очень сложно помочь, не зная, какое из вас изменилось. – 2010-11-23 09:45:33
Этот «индекс» является плохим неправильным выражением, поскольку он не является индексом, а узлом списка. Кроме того, в C++ вам не нужно предшествовать именам структур с помощью `struct` (` index * next_element; `и` index * previous_element` будет делать). О, и ответить на ваш вопрос: вы меняете указатели. Трудно получить быстрее, чем это. – sbi 2010-11-23 09:47:05