Java でリンクリストを出力する

Hiten Kanwar 2023年10月12日
Java でリンクリストを出力する

リンクリストは、ノードと呼ばれる要素を格納するために使用されます。ノードは、データと参照の 2つのエンティティで構成されます。参照は次のノードを指します。メモリ内のそれらのアドレスは、リンクリストの要素の順序を定義しません。

Java プログラミング言語は、LinkedList クラスを提供します。このクラスは、この二重リンクリストデータ構造の機能を提供する Java の CollectionsFramework で利用できます。

このチュートリアルでは、Java でリンクリストを出力する方法を紹介します。

LinkedList クラスを使用してリンクリストオブジェクトを作成し、add() 関数を使用していくつかの要素を追加し、それを表示できます。

以下のコードを参照してください。

import java.util.*;

public class ABC {
  public static void main(String[] args) {
    LinkedList<String> fruits = new LinkedList<>();
    fruits.add("apple");
    fruits.add("orange");
    fruits.add("mango");
    String str = fruits.listIterator(1).previous();
    System.out.println(fruits);
  }
}

出力:

[apple, orange, mango]

toString() 関数を使用して、最終的なリストを文字列として表示することもできます。toString() メソッドは、リンクリスト要素をコンマで区切られた文字列形式で返します。

例えば、

import java.util.*;

public class ABC {
  public static void main(String[] args) {
    LinkedList<String> fruits = new LinkedList<>();
    fruits.add("apple");
    fruits.add("orange");
    fruits.add("mango");
    String str = fruits.listIterator(1).previous();
    System.out.println(fruits.toString());
  }
}

出力:

[apple, orange, mango]

このメソッドは、リンクリストを最初から最後まで解析し、コンマを使用してそれらを区切ります。

リンクリストを開始して必要な機能を作成するためのユーザー定義クラスを作成することもできます。このようなクラスで作業している間、リストを表示するメソッドを作成する必要があります。

このメソッドを使用し、ユーザーの要件に基づいて更新するときに、toString() 関数をオーバーライドする必要があります。

例えば、

public class LinkedListNode {
  private int data;
  private LinkedListNode next;
  public LinkedListNode(int data) {
    this.data = data;
    this.next = null;
  }
  public int getData() {
    return data;
  }
  public void setData(int d) {
    data = d;
  }
  public LinkedListNode getNext() {
    return next;
  }
  public void setNext(LinkedListNode n) {
    next = n;
  }
}

public class LinkedList {
  public LinkedListNode head;
  public static void main(String[] args) {
    LinkedList list = new LinkedList();
    list.insertFront(1);
    list.insertFront(2);
    list.insertFront(3);
    System.out.println(list.toString());
  }
  public LinkedList() {
    this.head = null;
  }
  public int removeFront() {
    if (head == null) {
      System.out.println("Empty list");
      return 0;
    } else {
      int temp = head.getData();
      head = head.getNext();
      return temp;
    }
  }
  public void insertFront(int data) {
    if (head == null) {
      head = new LinkedListNode(data);
    } else {
      LinkedListNode newNode = new LinkedListNode(data);
      newNode.setNext(head);
      head = newNode;
    }
  }
  public void insertBack(int data) {
    if (head == null) {
      head = new LinkedListNode(data);
    } else {
      LinkedListNode newNode = new LinkedListNode(data);
      LinkedListNode current = head;
      while (current.getNext() != null) {
        current = current.getNext();
      }
      current.setNext(newNode);
    }
  }

  public int removeBack() {
    if (head == null) {
      System.out.println("Empty list");
      return 0;
    } else if (head.getNext() == null) {
      int temp = head.getData();
      head = null;
      return temp;
    } else {
      LinkedListNode current = head;
      while (current.getNext().getNext() != null) {
        current = current.getNext();
      }
      int temp = current.getNext().getData();
      current.setNext(null);
      return temp;
    }
  }

  public String toString() {
    String result = "";
    LinkedListNode current = head;
    while (current.getNext() != null) {
      result += current.getData();
      if (current.getNext() != null) {
        result += ", ";
      }
      current = current.getNext();
    }
    result += current.getData();
    return "Contents of the List: " + result;
  }

  public LinkedListNode getHead() {
    return head;
  }
}

出力:

Contents of the List: 3, 2, 1

必要なリストを文字列にフォーマットせずに直接出力することもできます。また、最初のノードから始めて表示し、次のノードに移動します。

次のコードを参照してください。

public class LinkedListNode {
  private int data;
  private LinkedListNode next;
  public LinkedListNode(int data) {
    this.data = data;
    this.next = null;
  }
  public int getData() {
    return data;
  }
  public void setData(int d) {
    data = d;
  }
  public LinkedListNode getNext() {
    return next;
  }
  public void setNext(LinkedListNode n) {
    next = n;
  }
}

public class LinkedList {
  public LinkedListNode head;
  public static void main(String[] args) {
    LinkedList list = new LinkedList();
    list.insertFront(1);
    list.insertFront(2);
    list.insertFront(3);
    list.display();
  }
  public LinkedList() {
    this.head = null;
  }
  public int removeFront() {
    if (head == null) {
      System.out.println("Empty list");
      return 0;
    } else {
      int temp = head.getData();
      head = head.getNext();
      return temp;
    }
  }
  public void insertFront(int data) {
    if (head == null) {
      head = new LinkedListNode(data);
    } else {
      LinkedListNode newNode = new LinkedListNode(data);
      newNode.setNext(head);
      head = newNode;
    }
  }
  public void insertBack(int data) {
    if (head == null) {
      head = new LinkedListNode(data);
    } else {
      LinkedListNode newNode = new LinkedListNode(data);
      LinkedListNode current = head;
      while (current.getNext() != null) {
        current = current.getNext();
      }
      current.setNext(newNode);
    }
  }

  public int removeBack() {
    if (head == null) {
      System.out.println("Empty list");
      return 0;
    } else if (head.getNext() == null) {
      int temp = head.getData();
      head = null;
      return temp;
    } else {
      LinkedListNode current = head;
      while (current.getNext().getNext() != null) {
        current = current.getNext();
      }
      int temp = current.getNext().getData();
      current.setNext(null);
      return temp;
    }
  }

  public void display() {
    LinkedListNode current = head;
    while (current.getNext() != null) {
      System.out.println(current.getData());
      current = current.getNext();
    }
    System.out.println(current.getData());
  }

  public LinkedListNode getHead() {
    return head;
  }
}

出力:

3
2
1

関連記事 - Java Linked List