wikipedia articleのように、1つのリンクリストの最後にある削除がO(1)時間になる理由を私は理解していません。1つのリンクされたリストO(1)を削除するのはなぜですか?
単一リンクリストは、ノードから構成されます。ノードには、ある種のデータと、次のノードへの参照が含まれています。リンクされたリスト内の最後のノードの参照はnullです。
-------------- -------------- --------------
| data | ref | -> | data | ref | -> ... -> | data | ref |
-------------- -------------- --------------
実際、O(1)の最後のノードを削除できます。しかし、その場合は、削除された最後のノードへの参照がまだ含まれているため、最後のノード(以前のもの)の参照をnullに設定しないでください。だから私は彼らが実行時間の分析でそれを無視しているのだろうかと思っていたのですか?それとも、参照を変更しなくてもいいということは合意されていますか?
もし無視されなければ、私は削除がO(n)であると主張するだろうから。新しく最後のノードに到達するには、リスト全体を反復処理し、その参照もnullに設定する必要があるためです。ダブルリンクされたリストの中では、本当にO(1)になります。
-edit- 多分、この観点から、より多くの透明性が得られます。しかし、ノード自体を正しく削除し、以前の参照をnullに設定することで、「ノードの削除」が表示されます。
Wikipediaの記事でO(1)への参照が2つありますが、いずれも、単独リンクリストの最後のノードを削除するとO(1)操作ではないことを示していません。おそらく、削除を試行するときに、前のノードへのポインタを保持しています。これは、最初のノード以外のノードを削除するために必要です。 –