挿入は、常に先頭または既知の要素の後に挿入することに満足している限り、単一リンクリストでの作業は明らかに少なくなります。(つまり、既知の要素の前に挿入することはできませんが、以下を参照してください。)
一方、削除は、削除する要素の前に要素を知る必要があるため、より注意が必要です。
これを行う 1 つの方法は、削除 API を、削除する要素の先行要素と連携させることです。これは、新しい要素の前身となる要素を取得する挿入 API を反映していますが、あまり便利ではなく、文書化するのも困難です。通常は可能ですが。一般的に言えば、リストをトラバースすることでリスト内の要素に到達します。
もちろん、リストを最初から検索して、削除する要素を見つけて、その前の要素が何であるかを知ることもできます。これは、delete API にリストの先頭が含まれていることを前提としていますが、これも不便です。また、検索は非常に遅いです。
ほとんど誰も使用しないが、実際には非常に効果的な方法は、単一リンク リスト反復子を、反復子の現在のターゲットの前の要素へのポインターになるように定義することです。これは単純で、要素への直接ポインターを使用するよりも 1 つの間接参照のみが遅く、挿入と削除の両方が高速になります。欠点は、要素を削除すると、要素をリストするための他のイテレータが無効になる可能性があることです。これは煩わしいことです。(削除される要素へのイテレータを無効にするわけではありません。これは、一部の要素を削除するトラバーサルには適していますが、それほど補償にはなりません。)
おそらくデータ構造が不変であるため、削除が重要でない場合、単一リンクリストは別の非常に便利なプロパティを提供します: それらは構造の共有を可能にします。一重連結リストは、幸いにも複数の頭の尾になることができますが、これは二重連結リストでは不可能です。このため、単方向リストは伝統的に、関数型言語の単純なデータ構造として選ばれてきました。