Javascript
 Computer >> コンピューター >  >> プログラミング >> Javascript

Javascriptを使用して二重リンクリストに要素を挿入する


リンクリストの特定の位置にデータを挿入する関数insert(data、position)を作成する必要があります。次の手順を実行します-

  • 新しいノードを作成する
  • リストが空かどうかを確認します。その後、ノードをヘッドとテールに追加して戻ります。
  • そうでない場合は、currElemを使用して挿入する位置まで繰り返します。 currElemをcurrElem.nextと等しくすることにより、リンクリストを繰り返します。

次に、次の方法でリンクを変更します-

  • 新しいノードがリスト内の次のノードを指すようにします
  • 次のノードの前のポイントを新しいノードに変更します
  • ノードが前のノードを指すようにします
  • 前のノードの次のポイントを新しいノードにします

最後に、currElemからリストの残りの部分へのリンクを解除し、作成したノードを指すようにします。これで、ノードはリスト内の指定された位置にあります。

これが同じイラストです-

Javascriptを使用して二重リンクリストに要素を挿入する

それでは、これをどのように実装するかを見てみましょう-

insert(data, position = this.length) {
   let node = new this.Node(data);
   this.length++;
   // List is currently empty
   if (this.head === null) {
      this.head = node;
      this.tail = node;
      return this.head;
   }
   // Insertion at head
   if (position == 0) {
      node.prev = null;
      node.next = this.head;
      this.head.prev = node;
      this.head = node;
      return this.head;
   }
   let iter = 1;
   let currNode = this.head;
   while (currNode.next != null && iter < position) {
      currNode = currNode.next;
      iter++;
   }
   // Make new node point to next node in list
   node.next = currNode.next;
   // Make next node's previous point to new node
   if (currNode.next != null) {
      currNode.next.prev = node;
   }
   // Make our node point to previous node
   node.prev = currNode;
   // Make previous node's next point to new node
   currNode.next = node;
   // check if inserted element was at the tail, if yes then make tail point to it
   if (this.tail.next != null) {
      this.tail = this.tail.next;
    }
    return node;
}

最後の要素として位置を指定していることに注意してください。これは、位置を指定しない場合、デフォルトで最後に挿入されるためです。

これは、次を使用してテストできます:

let list = new LinkedList();
list.insert(10);
list.insert(20);
list.insert(30);
list.insert(15, 2);
list.display();
>

出力

これにより、出力が得られます-

10 <->
30 <->
15 <->
20 <->

ご覧のとおり、すべての要素が意図した順序になっています。 2の後の位置に15を挿入してみました。


  1. C言語を使用したリンクリストへの要素の挿入について説明する

    リンクリストは動的メモリ割り当てを使用します。つまり、それに応じて拡大および縮小します。それらはノードのコレクションとして定義されます。ここで、ノードにはデータとリンクの2つの部分があります。データ、リンク、およびリンクリストの表現を以下に示します- リンクリストの操作 C言語のリンクリストには、次の3種類の操作があります- 挿入 削除 トラバース 挿入 ノード2とノード3の間にノード5を挿入する例を考えてみましょう。 ここで、最初にノード5を挿入します。 最後にノード5を挿入します。 最後にノード5を挿入します。 注: ノードに名前が付けられ

  2. C++で二重にリンクされたリストを使用した優先キュー

    データと優先度は整数値として与えられ、タスクは与えられた優先度に従って二重にリンクされたリストを作成し、結果を表示することです。 キューはFIFOデータ構造であり、最初に挿入された要素が最初に削除されます。優先度付きキューは、優先度に応じて要素を挿入または削除できるキューの一種です。キュー、スタック、またはリンクリストのデータ構造を使用して実装できます。優先キューは、次のルールに従って実装されます- 優先度が最も高いデータまたは要素は、優先度が最も低いデータまたは要素の前に実行されます。 2つの要素の優先度が、順番に実行される要素と同じである場合、それらはリストに追加されます。 優先