Javaでのダブルリンクドリストの実装と使用方法


まず、ダブルリンクドリストのノードを表すクラスを作成します。各ノードはデータと前後のポインタを持ちます。

class Node {
    int data;
    Node prev;
    Node next;

    public Node(int data) {
        this.data = data;
        this.prev = null;
        this.next = null;
    }
}

次に、リンクドリスト自体を表すクラスを作成します。リストは先頭ノードと末尾ノードを追跡し、各操作を実装します。

class DoublyLinkedList {
    private Node head;
    private Node tail;

    public DoublyLinkedList() {
        this.head = null;
        this.tail = null;
    }
// リストの先頭に要素を追加する
    public void addFirst(int data) {
        Node newNode = new Node(data);

        if (head == null) {
            head = newNode;
            tail = newNode;
        } else {
            newNode.next = head;
            head.prev = newNode;
            head = newNode;
        }
    }
// リストの末尾に要素を追加する
    public void addLast(int data) {
        Node newNode = new Node(data);

        if (tail == null) {
            head = newNode;
            tail = newNode;
        } else {
            newNode.prev = tail;
            tail.next = newNode;
            tail = newNode;
        }
    }
// リストの先頭の要素を削除する
    public void removeFirst() {
        if (head == null) {
            return;
        }

        if (head == tail) {
            head = null;
            tail = null;
        } else {
            head = head.next;
            head.prev = null;
        }
    }
// リストの末尾の要素を削除する
    public void removeLast() {
        if (tail == null) {
            return;
        }

        if (head == tail) {
            head = null;
            tail = null;
        } else {
            tail = tail.prev;
            tail.next = null;
        }
    }
// リストの要素を出力する
    public void printList() {
        Node current = head;

        while (current != null) {
            System.out.print(current.data + " ");
            current = current.next;
        }

        System.out.println();
    }
}

以上のコードは、Javaでのダブルリンクドリストの基本的な実装です。この実装では、先頭や末尾への要素の追加・削除が効率的に行えます。また、printListメソッドを使用すると、リストの要素を順番に出力することもできます。

以下は、上記の実装を使用する例です。

public class Main {
    public static void main(String[] args) {
        DoublyLinkedList list = new DoublyLinkedList();

        list.addFirst(3);
        list.addFirst(2);
        list.addFirst(1);

        list.printList(); // 結果: 1 2 3

        list.addLast(4);
        list.addLast(5);

        list.printList(); // 結果: 1 2 3 4 5

        list.removeFirst();
        list.removeLast();

        list.printList(); // 結果: 2 3 4
    }
}

この例では、要素の追加や削除を行い、最終的なリストの状態を表示してみます。ダブルリンクドリストの実装では、要素の追加や削除が効率的に行えるため、データの挿入や削除が頻繁に行われる場合に有用です。また、要素の逆方向へのトラバースも容易に行えます。

この記事では、ダブルリンクドリストの基本的な実装と使用方法を紹介しました。これを参考にして、自身のプロジェクトや課題に応じてダブルリンクドリストを活用してみてください。