Linusが示唆しているように間接参照を行うには、2つのレベルの間接指定が必要ですが、おそらくオブジェクトへの参照を格納しているPythonで行うこともできます。インデックス?)。つまり、私はそれが非常にエレガントに、または効率的にPythonにマップされているとは思えません。リンクされた構造内の単一のリンクを表すためにオブジェクトを使用するのはおそらくかなり無駄でしょう。
Pythonの場合、私は行方不明のトリックがない限り、頭から取り除いている場合をチェックするために追加の分岐を行うだけです。
リンクリストを自分で実装するためには、実際には標準ライブラリでは十分ではない多くのユースケースがあります。グリッドは、10,000個の細胞を持っているかもしれません
...:ここでは一例です。標準ライブラリで提供されているほとんどのリンクリストは、リンクリストを単独で使用できるようにするインターフェイスを提供しようとしているため、リストごとに32ビットインデックスのサイズで10,000以上のリンクリストを格納するよう最適化されていません。配列のような記憶のための分離したバッキングデータ構造)。通常、リンクリストの最も効率的な使用は、メモリを所有していないか、またはリソースを管理していないリストです。これは、階層の任意のレベルに要素を格納できるn-aryツリー内の128ビット(16バイト)ツリーノードの場合のように、別のデータ構造ですでに割り当てられて管理されている補助的な方法でデータをリンクするだけです。
struct TreeNode
{
int32 parent; // parent index or -1 for no parent
int32 first_child; // first child of this node or -1
int32 next_sibling; // next child for the parent node or -1
int32 element; // element data stored in this node or -1
// if no data is associated
};
だから、ユースケースの多くはより狭く、該当するユースケース(グリッドデータ構造、オクトリ、クワッド木、グラフなどのためにはるかに効率的であるあなた自身のリンクリストおよびその他のリンク構造を実現するためにあります)しかし、私はあなたが2つ以上のレベルのポインタ間接指定を容易に利用できないような言語でこのトリックを使用することはできないと思います。 Pythonは本質的にオブジェクト用のものしか持っていません - JavaやC#でも同じです。オブジェクト ""のようなオブジェクトへの参照への参照 "または"オブジェクトへのインデックスへのインデックス "または"オブジェクトへのオブジェクト参照へのインデックス ""へのインデックス。
また、リンクされたリストは、メモリ内にすべてのものが格納されている場所を管理することができない言語ではあまり役に立ちません。そうしないと、各リストノードが断片化されているGCサイクルの後にしばしば起こるようなメモリ、例えばリンクされたリストがLinuxカーネルの場合のように本当に効率的であるためには、各ノードがメモリ内にある場所を細かく制御できる必要があります。そのため、リストトラバーサルは実際にはほとんどではないにしても、ほとんど連続したチャンクメモリ。それ以外の場合は、線形時間の削除や中間からの挿入を意味していても、通常は小さな配列を使用する方が良いでしょう。
関連するLinusは、前のノードだけでなく、見込み客ノードを指し示すポインタに対処して、リストを通してポインタへのポインタを歩くことを試みます。'head'以外では外部ポインタは使用されず、代わりにpointer-to-pointerが使用されます。そして、与えられた例でそれ以外のものが指し示されていなければ、削除されたノードを "リーク"させます。リンクが切断されると、それらは到達不能になります。 – WhozCraig