問題は、ノードの順序が逆になるように、単一リンクリストLを逆転させるための再帰アルゴリズムを書く必要があることです。 これは少し抽象的ですが、私はコードや何も必要ないし、問題がアルゴリズムを要求して以来、私は固執しています。 私は始めるべきかどうか分かりませんが、私はリンクリストに関していくつかの簡単なことがあったことを意味します。正面に追加して削除するようなものですが、逆転(特に再帰的)は壁のようです。あなたが特定のコードを提供する必要はありませんのでリンクリストを再帰的に逆転する
0
A
答えて
2
、でしょう私もあなたの擬似コードを与えた場合、私はあなたの宿題をやっていると思いますので、私はちょうどあなたにいくつかのヒント;-)
一般的なアプローチをあげます
- (与えられたリストが空の場合、空のリストを返し、)基本ケースをカバーし
- 再帰を行うとテールに
- を反転させる反転尾に頭を追加すること。 A-> B-> NULL:
reverse(1 -> 2 -> 3)
= reverse(2 -> 3) -> 1
= reverse(3) -> 2 -> 1
= reverse() -> 3 -> 2 -> 1
= emptyList -> 3 -> 2 -> 1
= 3 -> 2 -> 1
1
は、2つのノードリストの単純なケースを考えてみましょうようにそれが行くだろう1 -> 2 -> 3
を逆にします。そのリストを逆にしてB-> A-> NULLになるようにするにはどうしますか?
まだ入手できない場合は、レゴのスタックがリンクリストであるとします。レゴを切断して再接続して、実際の生活の中で並べ替えを実行し、実行する各ステップをメモします。
0
私たちはLで最初n ≤ L.size()
ノードを反転させ、そして我々が行われL.size() ≤ 1
場合は、単にL (end = null if n = L.size())
のn番目のノードの後にノードへのポインタの終わりを返すメソッドreverse(L, n)
を定義してみましょう、そう私たちは、Lは、少なくとも2を持っていると仮定しましょうノード。 n = 1
を返した場合はL.first().next()
を返します。そうでない場合は、reverse(L, n - 1)
を再帰的に呼び出し、Lのn番目のノードに返されたポインタをendとします。の場合はn < L.size()
に、そうでない場合はnullに設定します。次に、Lの前にendで指されたノードを挿入し、retを返します。
FYI、合計実行時間はO(n)です。
関連する問題
- 1. リンクリストを逆転させるための再帰的解答
- 2. リンクリストを逆順に出力する再帰的メソッド
- 3. 再帰 - スレッド "main"の例外リンクリストの逆転中のjava.lang.StackOverflowError
- 4. リンクリストを再帰的にコピー
- 5. C:リンクリストの再帰的ソート
- 6. リンクリストの再帰的デストラクタ
- 7. 単一リンクリストを逆にするための再帰的な方法?
- 8. Javaの文字列を再帰的に逆転
- 9. 1つのリンクリストを逆転させる再帰的な実装についての質問
- 10. 再帰的voidメソッドを使用して文字列を逆転
- 11. リンクリスト、再帰
- 12. 再帰を使用してリンクリストを逆転させるコードスニペットを理解するのに役立つ
- 13. Swiftで二重リンクリストを逆転する
- 14. Java - 再帰的リンクリストの実装
- 15. クラスを再帰的に呼び出す(リンクリストを実装する)
- 16. スタックを再帰的にリンクリストに変換する
- 17. Python再帰のリンクリスト
- 18. Cを再帰的にリンクリストからノードを削除する
- 19. Javaのリンクリストで文字列を再帰的に置換する
- 20. 二重リンクリストを再帰的に複製する方法C++
- 21. リンクリストからノードを再帰的に削除する
- 22. 再帰を使用して文字列を逆転する
- 23. リンクリストの最大値を再帰的に見つける
- 24. voidメソッドを使用してリンクリストを再帰的に逆変換する方法はありますか?
- 25. 再帰によってノードを逆転させよ
- 26. ハスケル:ツリーの子を再帰的に逆にするには
- 27. クラスメソッド内でリンクリストを再帰的に返す
- 28. 再帰的なXMLの逆シリアル化
- 29. C++リンクリストの再帰挿入
- 30. MariaDB再帰的CTEの順序を逆にする
同様の質問です(1つのリンクリストの内容を逆に印刷します):http://stackoverflow.com/questions/9706681/recursive-printing-of-a-singly-linked-list-homework/9706802 #9706802正しい方向に向けるべきです。他の誰よりも前にヒントが出てくるので、最初にここに来るのではなく、投稿したときに試したことを説明してください。 – jzworkman
何を試しましたか?あなたは正確に何を「つぶれている? [完了していなくても]最初の試練を表示して、問題を解決する方法を手引きし、プロセスから学ぶことができます。 – amit
最初にすべきことは、リンクされたリストをどのように逆転させるかを簡単な文章で説明することです。リンクされたリストを逆にするために必要なステップを明確に特定できれば、コードを書くのは非常に難しいことではありません。あなたがそれを完了したら、リンクされたリストを逆にする再帰関数を書くようにしてください(btw、アルゴリズムは何か複雑ではないと思う、それは非常に単純な関数かもしれません)。 – Kiril