テクニカルインタビュープレップ:シングルリンクスリストカンニングペーパー


あなたの技術的なインタビューはわずか数日前ですか?骨のデータ構造の実を迅速に必要ですか?クール、始めましょう!ここでは、単一のリンクリストについて知っておく必要があります:

何ですか。



真珠を紐で考える.各々の真珠は、強いものによって次の真珠につながります.文字列の開始点、終了点、真珠の長さまたは長さがあります.
では、実際のデータ構造を見てみましょう.

「コンピュータ話」では、各々の真珠は現在「ノード」と呼ばれています.ノードにはデータが含まれます.そのデータは、「戦争と平和」の数、ストリング、あるいはコピーでありえました各ノードは次のノードを指す.これは、各ノードがどのノードがそれに続くかを知っていることを意味します(上記の写真の矢印で示されるように).
リンクリストの最初のノードをheadと呼びます.最後のノードはtailと呼ばれます.リンクされたリストの最後のノードであるtailは、何も指しないか、「コンピュータトーク」でNULLの値を指します.
我々がこれ以上行く前に、あなたは考えているかもしれませんさて、あなたは右だろう!
配列対シンボリックリンクリストのいくつかの長所を見てみましょう.

  • 配列にインデックスがあります.単独リンクリストはありません.
    配列内の特定の項目を必要とする場合は、必要なすべてのインデックスですし、それを迅速に見つけることができます.リンクリストはインデックスを持っていないので、要素にアクセスできる唯一の方法は、あなたが探しているものを見つけるまでリンクされたリストとループの先頭で開始することです.
  • メモリストレージ:特定のサイズのチョコレートバーとして配列を考える.それらはメモリに「そのまま」格納されなければならない.あなたは彼らを壊して、ここでもう一つの部分をそこで置くことができません.配列を連続したメモリ位置に格納する必要があります.
  • 一方、リンクされたリストは、メモリ内の小さなチャンクに格納することができます.リンクされたリストの各要素が要素の後に来るポインタを通して「記憶」されるので問題ない.
    これは、連結されたリストが非隣接の記憶場所に格納されることができることを意味する.どのように多くの場合は、リンクリストを使用して貧しいメモリにすることができますを考える!
  • 最後に、おそらくあなたのインタビューのために最も重要なのは挿入と削除が配列でずっと遅くなるということです.それを考える:あなたは100項目の配列があると言う.あなたはインデックス10で項目を削除します.現在、配列の項目のすべての残りの部分は、元のインデックス11から99まで、削除された項目によって残された穴を取るために1つの場所を移動しなければなりません.挿入のための同じ考え.あなたが希望する場所にアイテムを挿入する必要がありますし、“プッシュ”すべての残りの項目は、新しいアイテムのための部屋を作るために.挿入し、100ドミノの行から削除してみてください、その薄い端に立っている-楽しいではない!
  • 挿入と削除は、連結リストでそのような微風です.あなたがしなければならないすべては、メモリ内の最初の空きメモリ空間を見つけることです-それは、リスト内の他の何かと隣接する必要はありません覚えている-ちょうどポインタを再読み込みします.だから簡単かつ迅速に!

    あなたのインタビュアーを感動させるボーナス差


    JS開発者としてこれを知ることはできないかもしれませんが、実際には配列が宣言されたときに特定の量のメモリを割り当てられます.たとえば、Javaで動作している場合は、変数名myarrを使用している配列が、たとえば10個の長さであることを宣言する必要があります.配列サイズはJSにも割り当てられますが、あなたはそれを見ませんし、それに対処しなければなりません
    とにかく、配列で、コンパイル時にメモリが宣言されるとすぐに割り当てられます.これは静的メモリ割り当てと呼ばれます.
    他方、リンクされたリストのために、新規なノードが添加されるように、メモリーは実行時に割り当てられる.これは動的なメモリ割り当てとして知られています.したがって、これは静的なol '配列よりメモリ割り当てのより柔軟な配置です!
    を、十分な話.コードに戻りましょう.あなたのインタビュアーは非常によく単一のリンクリストを実装するようお願いします!
    すべてのこのデータ構造のものはクラスを使用するので、あなたが基本的なOOP技術に関していることを確認してください.
    リンクリストをコード化するには、実際に2つのクラスが必要です.最初のクラスはノードを作成する(リンクリストは次のノードを指すノードからなる).
    各々のノードは2つの特性を持ちます:値(val)と「次のノード」またはポインタ.どのように'試合は、“次へ”ポインタを呼び出します.以下はコードです.
    class Node {
     constructor(val) {
       this.val = val
       this.next = next
     }
    }
    
    次に、“singlyLinkedList”という名前の2番目のクラスを構築する必要があると思います
    SinglyLinkedListクラスの各インスタンスに、長さ、頭、尾を持つようにします.各インスタンスをゼロの長さで起動します.を設定する.きれいなスタートのような何もない!
    これがコードです.SinglyLinkedListクラスは、前の「ノード」クラスの直下です.
    class Node {
     constructor(val) {
       this.val = val
       this.next = next
     }
    }
    
    class SinglyLinkedList {
     constructor() {
       this.length = 0
       this.head = null
       this.tail = null
     }
    }
    
    今すぐあなたのインタビューでは、あなたがその場所を所有するように、その黒いマーカーをworkinされます!あなたは行く!
    より多くのインタビュー準備に備えていてください.
    JavaScript開発者としての私の一般的な知識のためにした最高のものの1つは、Javaコースのカップルを取ることでした.これは、手動スティックシフト(Java)に自動スティックシフト(JavaScript)を運転から行くようです.ちょうどそれを試して静かな通りを見つけることを忘れないでください!