私はあなたの質問が不明であるというコメントに同意しました。 しかし、二重リンクリスト(ヌル要素が許可されていない)で再帰的検索を実装する方法を探しているだけであると仮定します。もう1つの答えは既に言及しているので、私は、PageタイプをNodeのサブタイプにすると仮定します。実際、私は以下の例でそれを置き換えます。
二重リンクリストの実装と再帰そのものに関する誤解があるようですので、私は凝縮しているが実行中の例を挙げます。
提示しているコードには、再帰の終了条件がありません。残念ながら、ikichaのソリューションにも当てはまります。これを達成するための1つの方法(例えば、ヘルパーメソッドを使用して、不変式(start要素など)またはカウンタを再帰の1回の繰り返しから次の繰り返しに渡すことです。
この例の行node = node.left
は効果がありません。双方向で検索を行いたいのであれば(私がスケッチしたように)、なぜあなたの方向性が重要なのか興味があります。
public class DoubleLinked {
private Node first;
private Node last;
private int size;
private class Node {
public String content;
public Node left;
public Node right;
public Node(String content) {
this.content = content;
}
}
private void addElement(Node addedNode) {
if (first == null) {
first = addedNode;
last = addedNode;
} else {
last.right = addedNode;
addedNode.left = last;
addedNode.right = first;
last = addedNode;
}
size++;
}
private Node searchList(String term, Node node) {
int tries = 0;
if (node != null) {
return searchHelper(term, node.right, tries);
}
return null;
}
private Node searchHelper(String term, Node node, int tries) {
if (node == null || tries >= size) {
return null;
}
if (node.content.equals(term)) {
return node;
} else {
return searchHelper(term, node.right, tries);
}
}
public static void main(String[] args) {
DoubleLinked list = new DoubleLinked();
list.addElement(list.new Node("first"));
Node startNode = list.new Node("second");
list.addElement(startNode);
list.addElement(list.new Node("third"));
list.addElement(list.new Node("forth"));
Node r = list.searchList("forth", startNode);
System.out.println(r!=null?r.content:"term not found");
}
}
この問題を解決するには、特定の質問をする必要があります。 – 4castle
質問は何ですか? – Developer