おそらく、リンクされたリストの実装を少し深く考える必要があります。検索の時間が削除を実行するのに必要な時間であるため、遅延削除は何らかの方法で役立たないことを示します。
実際にリンクされたリストからアイテムを削除するために必要なことを考えてください。 注:これはSINGLYリンクリストを仮定しています(ダブルリンクリストではありません) 1)削除するアイテムを見つけます(これはSINGLEリンクリストであるため、PREVアイテムが必要なので常に検索する必要があります) 2)Keep PREVおよびNEXT要素へのポインタ 3)NEXT要素を指すように "PREV"要素を修正してください。 - したがって、CURRENT要素を二重リンクリストで隔離してください。また、NEXT要素を指し示す必要がありますPREV要素に渡します。 4)CURRENT要素に関連付けられたメモリを解放します。
ここで、遅延削除のプロセスは何ですか? ---もっと短く 1)削除するアイテムを探します(削除するオブジェクトへのポインタがあるので、検索を実行する必要はありません) 2)削除するアイテムにマークを付けます。
*)「ガベージコレクション」を実行し、実際にシステムが「IDLE」
各要素は、左右を持っているリンクリストとして実装された二分木されたときに残りのステップを実行するためのスレッドを待ちます - ただし、引き続き同じ手順を実行します。バイナリツリーの検索は、私が信じるO(Log(n))の方が効率的です。
しかし、より多くのポインタ( "LEFT"と "RIGHT"の両方)を扱うため、これらを削除する方が複雑になります。特に、ツリーノードを削除する場合左と右の両方のノードへのポインタを持っています - そのうちの1つは新しいルートに昇格する必要があります - しかし、どちらも既に左と右のポインタが割り当てられている場合はどうなりますか?元の「左/右」ノードはどこに行きますか? - この時点でツリーのバランスをとる必要があります。したがって、ユーザの観点からの削除と、メモリの詳細を処理する「アイドル」ガベージコレクション(ユーザがそれを待つ必要はない)を有するマークによって著しい節約がある。