私はしばらくの間、クラスのJavaプロジェクトに取り組んでいます。これは、リンクされたリスト (ここでは と呼ばれ、 とAddressList
呼ばれる単純なノードを含むListNode
) の実装です。問題は、すべてを再帰アルゴリズムで行う必要があることです。私はすべてのことを1つの方法でうまく行うことができました:public AddressList reverse()
リストノード:
public class ListNode{
public String data;
public ListNode next;
}
現在、私のreverse
関数は、再帰を許可する引数を取るヘルパー関数を呼び出すだけです。
public AddressList reverse(){
return new AddressList(this.reverse(this.head));
}
の署名を持つヘルパー関数を使用しますprivate ListNode reverse(ListNode current)
。
現時点では、スタックを使用して繰り返し動作させていますが、これは仕様が要求するものではありません。私は C 言語でアルゴリズムを再帰的に逆にして手動で Java コードに変換するアルゴリズムを見つけましたが、それは機能しましたが、理解できませんでした。
編集:気にしないで、その間にそれを理解しました。
private AddressList reverse(ListNode current, AddressList reversedList){
if(current == null)
return reversedList;
reversedList.addToFront(current.getData());
return this.reverse(current.getNext(), reversedList);
}
私がここにいる間、誰かこのルートに何か問題があると思いますか?