以下に示すコードは単方向リストの非常に簡単な実装例です。
しかし、これでいいのだろうかと思う点がありますので、皆さんにそれをお聞きしたいです。
Java
1class Node { 2 Node next = null; 3 int data; 4 5 public Node(int d) { 6 this.data = d; 7 } 8 9 void appendToTail(int d) { 10 Node end = new Node(d); 11 Node n = this; 12 while (n.next != null) { 13 n = n.next; 14 } 15 n.next = end; 16 } 17 18 Node deleteNode(Node head, int d) { 19 Node n = head; 20 21 if(n.data == d) { 22 return head.next; /*ノードの先頭を移動*/ 23 } 24 25 while (n.next != null) { 26 if(n.next.data == d) { 27 n.next = n.next.next; 28 return head; /*ノードの先頭は変化しない*/ 29 } 30 n = n.next; 31 } 32 return head; 33 } 34}
deleteNodeメソッドがよくわかりません。
単方向連結リストからノードを削除する方法というのは、例えばノードnが与えられたとして、一つ前のノードprevを探し、prev.nextをn.nextに置き換えるというものだと思います。
このメソッドではそれが実現されていますが、引数でNode型の参照を取るのは、渡したノードから数えられるようにということでいいのでしょうか?
つまり、削除のたびに最初から調べ上げていくのではなく、途中からでもその検索を始められるようにこのような形にしていると思ったのですが、どうでしょうか?
それともう一点あるのですが、戻り値がheadになっています。
ということは連結リスト内の要素(headの次の要素ではない)を二つ削除した時に返ってくるNodeは同一ということですよね?(もちろん連結リストは変わりますが)
このような戻り値にする意味はあるのでしょうか?
今まで見たものだと削除した時に戻ってくるのはその削除した要素もしくはvoidだったので、少し戸惑っております。
わかる方、回答お願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。