Non è più difficile.
Con gli elenchi doppiamente collegati, quando inserisci, assegnerai la memoria, quindi collegherai con la testa o il nodo precedente e con la coda o il nodo successivo. Quando si elimina, si scollegherà dallo stesso identico e quindi si libera memoria. Tutte queste operazioni sono simmetriche.
Ciò presuppone che in entrambi i casi si abbia il nodo da inserire / cancellare. (E nel caso dell'inserzione, che hai anche il nodo da inserire prima, quindi in un certo senso, l'inserimento potrebbe essere pensato come leggermente più complicato.) Se stai cercando di cancellare non avendo il nodo da eliminare, ma il < em> payload del nodo, quindi ovviamente dovrai prima cercare l'elenco per il payload, ma questa non è una mancanza di cancellazione, vero?
Con alberi bilanciati, lo stesso vale: un albero in genere ha bisogno di bilanciamento subito dopo un inserimento e anche immediatamente dopo una cancellazione. È una buona idea provare e avere una sola routine di bilanciamento e applicarla dopo ogni operazione, indipendentemente dal fatto che si trattasse di un inserimento o di una cancellazione. Se stai provando a implementare un inserimento che lascia sempre l'albero in equilibrio, e anche una cancellazione che lascia sempre l'albero in equilibrio, senza che i due condividano la stessa routine di bilanciamento, complichi inutilmente la tua vita.
In breve, non vi è alcun motivo per cui uno dovrebbe essere più duro dell'altro, e se si sta scoprendo che lo è, allora è infatti possibile che tu sia vittima della tendenza (molto umana) di trovarlo di più è naturale pensare in modo costruttivo che in modo sottrattivo, il che significa che potresti implementare l'eliminazione in un modo che è più complicato di quanto non debba essere. Ma questo è un problema umano. Da un punto di vista matematico, non ci sono problemi.