まず、リンクリストの基本的な構造を理解しましょう。リンクリストは、ノードと呼ばれるオブジェクトの連なりで構成されています。各ノードは、データと次のノードへの参照(ポインタ)を持っています。最初のノードをヘッドと呼び、最後のノードの参照はnullとなります。
リンクリストを作成するには、ノードオブジェクトを作成し、必要なデータを格納します。次に、ノード同士を連結するために、ノードの参照を設定します。例えば、2つのノードを作成した場合、最初のノードの参照を2番目のノードに設定します。
リンクリストの操作方法には、以下のようなものがあります。
-
リンクリストの末尾にノードを追加する方法:
- 新しいノードを作成し、現在のリンクリストの最後のノードの参照を新しいノードに設定します。
-
リンクリストの先頭にノードを追加する方法:
- 新しいノードを作成し、新しいノードの参照を現在のヘッドのノードに設定します。そして、新しいノードを新しいヘッドとして設定します。
-
リンクリストからノードを削除する方法:
- 削除したいノードの前後のノードの参照を修正し、削除したいノードを参照しないようにします。
-
リンクリストを走査する方法:
- リンクリストの先頭から順番にノードをたどり、データを取得したり、条件に基づいて処理を行います。
これらはリンクリストの基本的な操作方法ですが、実際のプログラムではさらに多くの操作が可能です。例えば、リンクリストを逆順にする、特定のデータを検索する、リンクリストをソートするなどの操作があります。
JavaScriptでリンクリストを実装するコード例を以下に示します。
class Node {
constructor(data) {
this.data = data;
this.next = null;
}
}
class LinkedList {
constructor() {
this.head = null;
}
append(data) {
const newNode = new Node(data);
if (!this.head) {
this.head = newNode;
} else {
let current = this.head;
while (current.next) {
current = current.next;
}
current.next = newNode;
}
}
prepend(data) {
const newNode = new Node(data);
newNode.next = this.head;
this.head = newNode;
}
delete(data) {
if (!this.head) {
return;
}
if (this.head.data === data) {
this.head = this.head.next;
return;
}
let current = this.head;
while (current.next) {
if (current.next.data === data) {
current.next = current.next.next;
return;
}
current = current.next;
}
}
printList() {
let current = this.head;
while (current) {
console.log(current.data);
current = current.next;
}
}
// 他の操作も追加できます
}
// 使用例
const linkedList = new LinkedList();
linkedList.append(1);
linkedList.append(2);
linkedList.append(3);
linkedList.prepend(0);
linkedList.delete(2);
linkedList.printList();
このコードは、Node
クラスとLinkedList
クラスを定義しています。Node
クラスは、リンクリストのノードを表すオブジェクトで、データと次のノードへの参照を保持します。LinkedList
クラスは、リンクリストを操作するためのメソッドを提供します。
以上がJavaScriptでリンクリストを実装し、操作する方法の簡単な紹介です。これらの基本的な操作を理解し、必要に応じてカスタマイズすることで、さまざまなプログラムでリンクリストを活用することができます。