java教えてください。
双方向リストをjavaで書きたいんですけどここまで書いて双方向リストになってるか不安になってきました。
これは双方向リストになっていますか?
class MyListw{
int data;
MyListw next = null; //次のノードへのポインタ
MyListw prev = null; //前のノードへのポインタ
MyListw(int data){
this.data = data;
}
void insertTail(MyListw node){ //リストの最後へ追加
MyListw tmp = this;
while(tmp.next != null){
tmp = tmp.next;
}
tmp.next = node;
node.prev = tmp.next;
}
void insertHead(MyListw node){ //リストの先頭へ追加
node.next = this.next;
this.next = node;
node.prev = this.next;
}
void insert(int head, MyListw node){ //リストの途中へ新規データを挿入
MyListw tmp = this;
while(tmp != null){
if(tmp.data == head){
break;
}
tmp = tmp.next;
}
node.next = tmp.next;
tmp.next = node;
node.prev = tmp.next;
}
void delete(int here, MyListw node){ //リストからデータを1つ削除
MyListw tmp = this;
while(tmp != null){
if(tmp.data == here){
break;
}
tmp = tmp.next;
}
node = tmp.next;
tmp.next.prev = node;
tmp.next = node.next;
node.next.prev = tmp.next;
node.next = null;
node.prev = null;
}
void deleteHead(){ //先頭のノードを削除
MyListw tmp = next;
this.next = tmp.next;
tmp.next.prev = this.next;
tmp.next = null;
tmp.prev = null;
}
void deleteTail(){ //最後のノードを削除
MyListw tmp = this;
MyListw lastList = null;
while(tmp.next != null){
lastList = tmp;
tmp = tmp.next;
}
lastList.next = null;
lastList.prev = null;
}
void show(){
MyListw tmp = next;
while(true){
System.out.print(tmp.data);
if(tmp.next == null)
break;
tmp = tmp.next;
}
System.out.println("");
}
void showTail(){
}
}
class MyListwApp{
public static void main(String[] args){
MyListw list = new MyListw(0); //初期ダミー
System.out.println("最後に追加");
list.insertTail(new MyListw(1));
list.show();
System.out.println("逆順に表示");
list.showTail();
System.out.println("\n");
list.insertTail(new MyListw(5));
list.show();
System.out.println("逆順に表示");
list.showTail();
System.out.println("先頭に追加");
list.insertHead(new MyListw(8));
list.show();
System.out.println("逆順に表示");
list.showTail();
System.out.println("\n");
list.insertHead(new MyListw(9));
list.show();
System.out.println("逆順に表示");
list.showTail();
System.out.println("途中からデータを追加");
list.insert(1, new MyListw(2));
list.show();
System.out.println("逆順に表示");
list.showTail();
System.out.println("\n");
list.insert(2, new MyListw(3));
list.show();
System.out.println("逆順に表示");
list.showTail();
System.out.println("リストからデータを削除");
list.delete(8, new MyListw(1));
list.show();
System.out.println("逆順に表示");
list.showTail();
System.out.println("先頭のノードを削除");
list.deleteHead(); //先頭のノードを削除
list.show();
System.out.println("逆順に表示");
list.showTail();
System.out.println("\n");
list.deleteHead();
list.show();
System.out.println("逆順に表示");
list.showTail();
System.out.println("最後のノードを削除");
list.deleteTail(); //最後のノードを削除
list.show();
System.out.println("逆順に表示");
list.showTail();
System.out.println("\n");
list.deleteTail();
list.show();
System.out.println("逆順に表示");
list.showTail();
}
}
お礼
参考になりました ありがとうございました