Это не сложнее.
В случае двусвязных списков при вставке вы будете выделять память, а затем будете связываться либо с головкой, либо с предыдущим узлом, а также с хвостом или следующим узлом. Когда вы удалите, вы будете отменять связь с точно таким же, а затем освободить память. Все эти операции симметричны.
Это предполагает, что в обоих случаях у вас есть узел для вставки / удаления. (И в случае вставки, у вас также есть узел для вставки ранее, поэтому, в некотором смысле, вставка может считаться немного более сложной.) Если вы пытаетесь удалить, имея не узел для удаления, а полезную нагрузку узла, то, конечно, сначала нужно будет найти полезную нагрузку в списке, но это не недостаток удаления, не так ли?
С сбалансированными деревьями применяется то же самое: дерево обычно нуждается в балансировке сразу после вставки, а также сразу после удаления. Рекомендуется использовать только одну подпрограмму балансировки и применять ее после каждой операции, независимо от того, была ли она вставкой или удалением. Если вы пытаетесь реализовать вставку, которая всегда оставляет сбалансированное дерево, а также удаление, которое всегда оставляет сбалансированное дерево, без того, чтобы эти два элемента использовали одну и ту же процедуру балансировки, вы излишне усложняете свою жизнь.
Короче говоря, нет причины, по которой один должен быть сильнее другого, и если вы обнаружите, что это так, то на самом деле вполне возможно, что вы стали жертвой (очень человечной) тенденции находить более естественным мышление Конструктивно, а не субтрактивно, это означает, что вы можете реализовывать удаление более сложным способом, чем это необходимо. Но это человеческая проблема. С математической точки зрения это не проблема.
pop
,extract-min
?