前提・実現したいこと
リストの全ての要素を末尾から出力したい
そのまま出力することはできたのですが、逆順の出力がわかりません。
Collectionやforを使ったのですがうまくいきませんでした。
今現在太字で書いているところなのですが
このプログラムの改善点を教えていただきたいです。
以下のようにしたいですが
/* printAll /
A
<->
B
<->
C
<->
D
/ printAllReverse */
D
<->
C
<->
B
<->
A
このようになってしまいます。
/* printAll */
A
<->
B
<->
C
<->
D
/* printAllReverse */
null
Exception in thread "main" java.lang.NullPointerException
at DoublyLinkedList.printAllReverse(DoublyLinkedList.java:98)
at Lesson15_1.main(Lesson15_1.java:13)
該当のソースコード
public class Main {
public static void main(String[] args) {
DoublyLinkedList list = new DoublyLinkedList();
list.insert(1, "A");
list.insert(2, "B");
list.insert(3, "C");
list.insert(4, "D");
System.out.println("/* printAll */"); list.printAll(); System.out.println(); **System.out.println("/* printAllReverse */"); list.printAllReverse();** }
}
public class DoublyLinkedList {
private DoublyElement firstElement;
//リストの先頭
private DoublyElement lastElement;
//リストの最後
public DoublyLinkedList() {
//コンストラクタ
this.firstElement = new DoublyElement(null);
this.lastElement = new DoublyElement(null);
this.firstElement.setNextElement(this.lastElement);
this.lastElement.setPreviousElement(this.firstElement);
}
public Object get(int index) {
//index番目のデータを取り出す
DoublyElement element = this.getElement(index);
// 指定された場所にDoublyElementオブジェクトがあるか調べる
if (null == element) {
// 指定された場所にDoublyElementオブジェクトがないので
// エラーメッセージを出力して処理を抜ける
System.out.println("Not exist: " + index);
return null;
}
return element.getData();
}
public boolean insert(int index, Object obj) { //index番目にobjを格納した要素を挿入 //指定された場所が正しいかどうか if (index < 1) {System.out.println("Cannot insert: " + index); return false; } DoublyElement previous = this.getElement(index-1); if (previous == null) { System.out.println("Cannot insert: " + index); return false; } DoublyElement element = new DoublyElement(obj); element.setNextElement(previous.getNextElement()); previous.getNextElement().setPreviousElement(element); previous.setNextElement(element); element.setPreviousElement(previous); return true; } public boolean remove(int index) { //index番目の要素を削除 //指定された場所が正しいかどうか if (index < 1) { System.out.println("Cannot remove: " + index); return false; } DoublyElement removeElement = this.getElement(index); if (removeElement == null) { System.out.println("Cannot remove: " + index); return false; } DoublyElement previous = this.getElement(index -1); previous.setNextElement(removeElement.getNextElement()); removeElement.getNextElement().setPreviousElement(previous); removeElement.setNextElement(null); removeElement.setPreviousElement(null); return true; } private DoublyElement getElement(int index) { //index番目の要素を取得 DoublyElement currentElement = this.firstElement; // 指定された場所まで、先頭から順番に移動する for (int count = 0; count < index; count++) { // 次の要素へ移動 currentElement = currentElement.getNextElement(); // リストの最後まで到達 if (currentElement == this.lastElement) { return null; } } return currentElement; } public void printAll() { DoublyElement currentElement = this.firstElement.getNextElement(); while (currentElement != this.lastElement) { System.out.println(currentElement); currentElement = currentElement.getNextElement(); if (currentElement != this.lastElement) { System.out.println("<->"); } } System.out.println(); } **public void printAllReverse(){ DoublyElement currentElement = this.lastElement.getNextElement(); while (currentElement != this.firstElement) { System.out.println(currentElement); currentElement = currentElement.getNextElement(); if (currentElement != this.firstElement) { System.out.println("<->");** } } System.out.println(); }
Java
public class DoublyElement {
private Object data;
private DoublyElement next, previous;
private DoublyElement () {
}
public DoublyElement (Object obj) {
this.data = obj;
}
public Object getData() {
return this.data;
}
public DoublyElement getNextElement() {
return this.next;
}
public void setNextElement(DoublyElement nextElement) {
this.next = nextElement;
}
public DoublyElement getPreviousElement() {
return this.previous;
}
public void setPreviousElement(DoublyElement previousElement) {
this.previous = previousElement;
}public String toString() {
return this.data.toString();
}
}
回答2件
あなたの回答
tips
プレビュー