귀하의 질문에 대한 의견에 동의해야합니다. 그러나 null 연결 요소가 허용되지 않는 이중 연결 목록에서 재귀 검색을 구현하는 방법을 찾고 있다고 가정합니다. 다른 대답은 이미 언급했듯이, Node는 노드 유형의 하위 유형으로 가정합니다. 사실, 저는 아래의 예에서 그것을 대체 할 것입니다.
이중 연결 목록을 구현하고 재귀 자체에 대해 오해가있는 것처럼 보이므로 압축 된 있지만 실행중인 예제를 제공합니다.
제시하는 코드에 재귀의 종료 조건이 없습니다. 불행히도, ikicha의 솔루션에도 해당됩니다. 이를 달성하기위한 한 가지 방법은 도우미 메서드를 사용하여 invariant (예 : start 요소) 또는 카운터를 반복의 한 반복에서 다음 반복으로 전달하는 것입니다.
예에서 행 node = node.left
은 아무 효과가 없습니다. 양방향으로 검색을 수행하고 싶다면 (ikicha가 스케치 한 것처럼) 방향이 중요한 이유에 대해 관심을 가질 것입니다.
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