Java でリンクリストを出力する
Hiten Kanwar
2023年10月12日
リンクリストは、ノードと呼ばれる要素を格納するために使用されます。ノードは、データと参照の 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