Javaで循環連結リストを実装する方法を教えてください。
循環連結リストは、ノードクラスと循環連結リストクラスを使用してJavaで実装できます。次のような簡単なコード例があります。
public class Node {
private int data;
private Node next;
public Node(int data) {
this.data = data;
this.next = null;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
public class CircularLinkedList {
private Node head;
public void addToEmptyList(int data) {
Node newNode = new Node(data);
newNode.setNext(newNode);
head = newNode;
}
public void addToFront(int data) {
Node newNode = new Node(data);
if (head == null) {
addToEmptyList(data);
} else {
newNode.setNext(head);
Node temp = head;
while (temp.getNext() != head) {
temp = temp.getNext();
}
temp.setNext(newNode);
head = newNode;
}
}
public void addToEnd(int data) {
Node newNode = new Node(data);
if (head == null) {
addToEmptyList(data);
} else {
newNode.setNext(head);
Node temp = head;
while (temp.getNext() != head) {
temp = temp.getNext();
}
temp.setNext(newNode);
}
}
public void display() {
if (head == null) {
System.out.println("List is empty");
} else {
Node temp = head;
do {
System.out.print(temp.getData() + " ");
temp = temp.getNext();
} while (temp != head);
System.out.println();
}
}
public static void main(String[] args) {
CircularLinkedList list = new CircularLinkedList();
list.addToEnd(1);
list.addToEnd(2);
list.addToFront(3);
list.display();
}
}
本サンプルコードでは、ノードクラスはリンクリストのノードを示し、データと次のノードへの参照を持ちます。 CircularLinkedListクラスは循環リンクリストを表し、先頭ノード(head)を使用して循環リンクリストの開始位置を表します。
addToEmptyListメソッドは空の連結リストにノードを追加するために利用され、addToFrontメソッドは連結リストの先頭にノードを追加するために利用され、addToEndメソッドは連結リストの末尾にノードを追加するために利用される。
displayメソッドを使用すると、循環リストのすべてのノードをプリントできます。
mainメソッドにて、循環連結リストを作成し、ノードを追加し、表示メソッドを呼び出してリストの内容を表示します。
出力が3 1 2となる