Listについて
世界で闘うプログラミング力を鍛える150問 ~トップIT企業のプログラマになるための本~
- 作者: Gayle Laakmann McDowell,秋葉拓哉,岩田陽一,北川宜稔,Ozy
- 出版社/メーカー: マイナビ
- 発売日: 2012/11/13
- メディア: 単行本(ソフトカバー)
- 購入: 143人 クリック: 7,806回
- この商品を含むブログ (53件) を見る
ノードクラス。
package intro.linkedList; public class Node { Node next = null; int data; public Node(int d){ data = d; } void appendToTail(int d){ Node end = new Node(d); Node node = this; while(node.next != null){ node = node.next; } node.next = end; } }
確認コード。
package intro.linkedList; public class Test { public static void main(String[] args) { Node node1 = new Node(1); Node node2 = new Node(2); Node node3 = new Node(3); //node1の次のノードにnode2を指定する node1.next = node2; //node1から始めるリストに値9を保持するノードを加える node1.appendToTail(9); //ノードの末尾に別のノード(node2)を加えるために、線形探索を行う Node node = node1; while(node.next != null){ node = node.next; } node.next = node3; //結果の表示 node = node1; while(node != null){ System.out.println(node.data); node = node.next; } } }
循環リストにするには、最後のノードが指す次のノード(null)を、最初のノード(node1)に変更すると良い。
//最後のノードが指す次のノードを最初のノードにして、連結リストにする
node.next.next = node1;
確認コード。
package intro.linkedList; public class Test { public static void main(String[] args) { Node node1 = new Node(1); Node node2 = new Node(2); Node node3 = new Node(3); //node1の次のノードにnode2を指定する node1.next = node2; //node1から始めるリストに値9を保持するノードを加える node1.appendToTail(9); //ノードの末尾に別のノード(node2)を加えるために、線形探索を行う Node node = node1; while(node.next != null){ node = node.next; } node.next = node3; //最後のノードが指す次のノードを最初のノードにして、循環リストにする node.next.next = node1; //結果の表示 node = node1; for(int i=0; i<8; ++i){ System.out.println(node.data); node = node.next; } } }
特定の値を保持するノードを削除するメソッドを追加した場合のNodeクラス。
package intro.linkedList; public class Node { Node next = null; int data; public Node(int d){ data = d; } //ノードの追加 void appendToTail(int d){ Node end = new Node(d); Node node = this; while(node.next != null){ node = node.next; } node.next = end; } //特定の値を保持するノード削除する Node deleteNode(Node head, int d){ Node node = head; if(node.data == d){ //先頭が削除対象の場合、先頭を次のノードに変更する return head.next; } while(node.next != null){ if(node.next.data == d){ node.next = node.next.next; return head; } node = node.next; } return node; } //特定の値を保持するノードを削除する Node deleteNode(int d){ Node node = this; if(node.data == d){ //先頭が削除対象の場合、先頭を次のノードに変更する return this.next; } while(node.next != null){ if(node.next.data == d){ node.next = node.next.next; return this; } node = node.next; } return this; } }