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

JavaScriptでリンクリスト(連結リスト)を作成する方法

連結リスト(リンクリスト)は、各要素が「データ」と「次の要素への参照」を持つデータ構造です。配列と異なり、要素の挿入や削除を効率的に行えるのが大きな特徴です。この記事では、JavaScriptを使ってシンプルな連結リストを実装する方法を、サンプルコードとともにわかりやすく解説します。

LinkedListクラスとNodeクラスの定義

まず、headnullで初期化するコンストラクタを持つシンプルなクラスを定義することから始めましょう。あわせて、LinkedListクラスのプロトタイプに、連結リストの各ノードを表すNodeクラスも定義します。

class LinkedList {
    constructor() {
        this.head = null;
        this.length = 0;
    }
}
LinkedList.prototype.Node = class {
    constructor(data) {
        this.data = data; this.next = null;
    }
}

ここで定義したLinkedListクラスは、リストの先頭を指すheadと、現在の要素数を管理するlengthを持ちます。また、Nodeクラスは実際のデータ(data)と、次のノードへの参照(next)を保持する役割を担います。

display関数でリストの中身を確認する

次に、リストの状態を目視で確認できるようにするためのdisplay関数を作成しましょう。この関数は、以下のように動作します。

  • 先頭(head)から処理を開始します。
  • currNode = currNode.next を使ってリストを順番にたどり、currNodenullになる(=リストの末尾に到達した)までループを続けます。
  • 各ループの処理で、ノードが持つデータを出力します。

この一連の流れを図で示すと、以下のようになります。

JavaScriptでリンクリスト(連結リスト)を作成する方法

display関数の実装

それでは、上記のロジックを実際のコードとして実装してみましょう。

display() {
    let currNode = this.head;
    while (currNode != null) {
        console.log(currNode.data + " -> ");
        currNode = currNode.next;
    }
}

このように、whileループでnext参照をたどるだけで、連結リスト全体を簡単に走査できます。currNodenullになった時点で末尾に到達したことがわかるため、ループ終了条件として自然に機能します。この基本構造をベースにすれば、要素の挿入や削除など、より高度な操作も実装しやすくなります。

  1. JavaScriptで入力に応じて自動的に高さが変わるテキストエリアを作成する方法

    Webフォームなどで長い文章を入力する際、テキストエリアの高さが固定されているとスクロールが必要になり、使い勝手が損なわれることがあります。そこで役立つのが、入力内容に応じて高さを自動的に調整する「自動リサイズテキストエリア」です。 仕組み 実装のポイントは次の2点です。 inputイベント:ユーザーがテキストを入力・貼り付けするたびに処理を実行します。 scrollHeightプロパティ:要素の中身全体の高さを取得し、その値をstyle.heightに設定することで、コンテンツに合わせた高さに変更できます。 一度heightを「auto」に戻してからscrollHeightを設定するのが

  2. C言語で連結リストを使った優先度付きキューの実装方法

    本記事では、整数値の「データ」と「優先度」が与えられたとき、指定された優先度に従って連結リスト(リンクリスト)を構築し、結果を表示する方法を解説します。 優先度付きキューとは キューはFIFO(First In, First Out:先入れ先出し)方式のデータ構造であり、最初に挿入された要素が最初に取り除かれます。 一方、優先度付きキュー(プライオリティキュー)は、要素の挿入・削除を「優先度」に基づいて行えるキューの一種です。キュー、スタック、連結リストなどのデータ構造を用いて実装でき、以下のルールに従って動作します。 優先度が最も高いデータ(要素)は、優先度が低いものよりも先に処理される。