Если вы спрашиваете, почему вставка элемента в произвольной позиции в двусвязном списке длины N всегда занимает не более O (N / 2), это может быть потому, что если вы всегда будете поддерживать отдельный указатель / ссылку насредний элемент и счетчик общего количества элементов, вам нужно будет пройти не более половины списка, чтобы вставить его в заданную позицию.
Например, скажем, у вас есть список [B, C, D, E, F, G, H]
, еслиу вас есть указатель на элемент E
, и вы знаете, что в вашем списке 7 элементов.Если вы позвоните insert(0, A)
, чтобы вставить элемент A
в положение 0
, то вы будете знать, что если вы переместитесь на 3 ссылки назад, вы перейдете из положения 3 в положение 0 (помните, что нулевой индекс является первым, поэтому выперейти от E
@ 3 -> D
@ 2 -> C
@ 1 -> B
@ 0).Оттуда вы можете вставить элемент A
перед вашим «текущим» элементом (B
).
Обратите внимание, что люди обычно оставляют постоянные выражения вне анализа big-O;O (n / 2) и O (n) имеют те же характеристики, что и увеличение n
.