Ce n'est pas plus dur.
Avec les listes doublement liées, lors de l'insertion, vous allouez de la mémoire, puis vous liez avec le nœud principal ou précédent, et avec le nœud suivant ou le nœud suivant. Lorsque vous supprimez, vous supprimez exactement le même lien, puis vous libérez de la mémoire. Toutes ces opérations sont symétriques.
Cela suppose que dans les deux cas, vous avez le noeud à insérer / supprimer. (Et dans le cas de l'insertion, vous devez également insérer le nœud avant, donc, d'une certaine manière, l'insertion peut être considérée comme légèrement plus compliquée.) Si vous essayez de supprimer sans avoir le nœud à supprimer, mais la charge utile du nœud, vous devrez bien sûr commencer par rechercher la charge utile dans la liste, mais ce n’est pas un défaut de suppression, n’est-ce pas?
Il en va de même pour les arbres équilibrés: un arbre doit généralement être équilibré immédiatement après une insertion et également immédiatement après une suppression. C'est une bonne idée d'essayer de ne créer qu'un seul programme d'équilibrage et de l'appliquer après chaque opération, qu'il s'agisse d'une insertion ou d'une suppression. Si vous essayez d'implémenter une insertion qui laisse toujours l'arbre équilibré et une suppression qui laisse toujours l'arbre équilibré, sans que les deux partagent la même routine d'équilibrage, vous compliquez inutilement votre vie.
En bref, il n’ya aucune raison pour que l’un soit plus dur que l’autre, et si vous constatez que c’est le cas, il est en fait possible que vous soyez victime de la tendance (très humaine) de trouver plus naturel de penser de manière constructive plutôt que soustractive, ce qui signifie que vous pouvez implémenter la suppression d'une manière plus compliquée que nécessaire. Mais c'est un problème humain. D'un point de vue mathématique, il n'y a pas de problème.
pop
,extract-min
?