To nie jest trudniejsze.
W przypadku podwójnie połączonych list podczas wstawiania będziesz alokować pamięć, a następnie będziesz łączył się z nagłówkiem lub poprzednim węzłem, a także z ogonem lub następnym węzłem. Po usunięciu rozłączysz się dokładnie z tym samym, a następnie zwolnisz pamięć. Wszystkie te operacje są symetryczne.
Zakłada się, że w obu przypadkach masz węzeł do wstawienia / usunięcia. (A w przypadku wstawiania, że masz również węzeł do wstawienia, więc w pewnym sensie wstawianie może być uważane za nieco bardziej skomplikowane.) Jeśli próbujesz usunąć, nie usuwając węzła, ale ładunek węzła, to oczywiście będziesz musiał najpierw przeszukać listę pod kątem ładunku, ale to nie jest wada usunięcia, prawda?
W przypadku zrównoważonych drzew to samo dotyczy: drzewo zasadniczo wymaga równoważenia natychmiast po wstawieniu, a także natychmiast po usunięciu. Dobrym pomysłem jest wypróbowanie tylko jednej procedury równoważenia i stosowanie jej po każdej operacji, niezależnie od tego, czy była to wstawianie, czy usuwanie. Jeśli próbujesz wprowadzić wstawkę, która zawsze pozostawia drzewo w równowadze, a także usunięcie, które zawsze pozostawia drzewo w równowadze, bez jednoczesnego korzystania z tej samej procedury równoważenia, niepotrzebnie komplikujesz swoje życie.
Krótko mówiąc, nie ma powodu, dla którego jedno powinno być trudniejsze od drugiego, a jeśli okaże się, że tak jest, to w rzeczywistości możliwe jest, że jesteś ofiarą (bardzo ludzkiej) tendencji, by uważać za bardziej naturalne myślenie konstruktywnie niż subtraktywnie, co oznacza, że możesz implementować usuwanie w sposób, który jest bardziej skomplikowany niż to konieczne. Ale to ludzki problem. Z matematycznego punktu widzenia nie ma problemu.
pop
,extract-min
?