リンクリスト内のヘッドノードは情報を持っているか、リンクリストの最初のノードだけを指していますか?
ヘッドノードをリンクリストの開始ノードとして定義できますか?
ヘッドノードは最初のノードのみを指していますか? リンクされたリストはノードで構成され、各ノードにはデータと、リスト内の別のノードへのリンクが含まれています。しかし、最初のノードは、データと2番目のノードへのリンクを含むノードですか?あるいは、それはノードへのリンク(およびデータなし)だけを含んでいますか?私は、リンクされたリストの最初のノードにデータと別のノードへのリンクがあると考えましたが、1つの入門書では、頭はノードですが、最初のノードに移動するリンクです。同時に、headはノードの型の変数です。なぜそれはこのようなものですか?リンク・リストの先頭ノードと開始ノードの違いは何ですか?
答えて
従来、ヘッドノードはリンクされたリストの最初のノードですが、「タイプ」の観点からは他のどのノードとも変わりません。それには、データだけでなく、次のノード(リンクされたリストの第2ノードが存在する場合)へのポインタも含まれます。
この回答は必ずしも真実ではありません。リストを実装する方法はたくさんありますが、この例は1つだけです。 –
@Carl - 私はこれが唯一の方法であると主張しませんでした。私は単にこれが大会だと言った。 – Sid
この実装がコンベンションであると述べるには、どのような基準がありますか? –
実装によって異なります。 head
変数は、通常、この1ノードリストのようなリストの最初のノードを指し示すノードポインタある:
+--------+
head -> | node 1 | -> NULL
+--------+
しかし、私が見た実装場所(二重に「空」リンクされた)リストは2つのノードで構成されているため、挿入および削除コードは、先頭または末尾の前に挿入しようとするエッジの場合や頭/尾の削除を心配する必要はありません。
挿入する位置(および削除を許可するすべてのノード)にprev
ノードとnext
ノードがあるため、コードは簡略化されています。
+-------+ +------+ +-------+
head -> | dummy | -> | node | -> | dummy | -> NULL
NULL <- | node | <- | 1 | <- | node | <- tail
+-------+ +------+ +-------+
ではなく頭や尾をチェックするたくさんの、挿入および削除は、次のとおりです。
def insertBefore (node, newnode):
newnode.next = node
newnode.prev = node.prev
node.prev.next = newnode
node.prev = newnode
def deleteNode (node):
node.prev.next = node.next
node.next.prev = node.prev
free node
それ少し複雑なリストトラバーサルあなたはcurr = head.next
ではなくcurr = head
で開始し、いつ終了しなければならなかったので、 curr == NULL
ではなくcurr == last
であるが、使用されていない2つのノードを犠牲にして有効なトレードオフと考える人もいる。
あなたはそれをリストオブジェクト
- 店のポインタが空のデータメンバー
- と「頭」ノードは、特別な「頭を持っている、少なくとも3つの異なる方法を行うことができますデータメンバのないノード
これらのそれぞれは、いくつかの操作を優先するか、使用される領域を最適化するトレードオフを持っています。
他のノードと同じタイプのヘッドオブジェクトを持つと、リンク操作が簡単になります。データペイロードのないヘッドノードを有することにより、メモリが節約される。リストオブジェクト内にポインタを格納すると、空のリストの動的割り当てが節約される可能性がありますが、swap
を実装するのが難しくなります。
すべての用途に最適です。
- 1. リンク先の先頭に新しいノードを挿入
- 2. リストの先頭にノードを挿入する
- 3. ノードとノードのjsの違いは?
- 4. エリクサーでは、ノードとプロセスの違いは何ですか?
- 5. リンクされたリストの先頭にノードを追加するとエラーメッセージが表示されない
- 6. ブラウザとノードのEventLoopの違いは何ですか?
- 7. SymmetricDSのノードとエンジンの違いは何ですか?
- 8. hyper ledger v0.6でピア、ノード、およびピアノードの開始とは何ですか?
- 9. 開始ノード - 赤いサイレント
- 10. オープン・ノードの開始エラー
- 11. NodeJS Webアプリケーションファイルアップロードの開始オフファイルの先頭
- 12. プッシュ機能(リストの先頭に新しいノードを追加する)C++
- 13. ノードとモジュールの違いは?
- 14. Playの実行と開始の違いは何ですか?
- 15. ヒープの違いノード4とノード6
- 16. ノード*ルートとノード*ルートの違い
- 17. ノードとリンクされたリストの問題
- 18. 糸走行とnpm開始の違いは何ですか?
- 19. 先行ノードと後継ノードの検索
- 20. C++でのデータ構造。リンクリストのノードの先頭に挿入
- 21. ノード内からエッジを開始する
- 22. ノード* nextとノード* nextに違いはありますか?
- 23. ノードとvnodeの違い
- 24. ノードの子プロセスとは何ですか?
- 25. iノードのデバイスとは何ですか?
- 26. drupalの「ノード」とは何ですか?
- 27. ノードjsのexports.installとは何ですか?
- 28. ノードjs内のstat fstatとlstat関数の違いは何ですか
- 29. 別のノードからストリームを開始していますか?
- 30. リンクリストの先頭にノードを挿入する
リンクされたリストの実装に完全に依存します。 –