如何在不使用节点的情况下,利用递归交替合并链表?

huangapple go评论101阅读模式
英文:

How do I merge linked list alternately without using nodes? and by using recursion?

问题

以下是翻译好的内容:

没有错误,但仍无法工作。我无法弄清楚问题出在哪里。我们还没有在课堂上讨论过节点的概念,所以我很难理解它。

输出应为:

Skinny Love- Birdy

Happier- Ed Sheeran

Someday- Chelsea Cutler

  1. public class HandsOnAct1 {
  2. static LinkedList songs = new LinkedList();
  3. static LinkedList artists = new LinkedList();
  4. static LinkedList playlist = new LinkedList();
  5. public static void Merge(){
  6. int element= songs.size();
  7. int number=0;
  8. System.out.println(element);
  9. if (number !=element){
  10. playlist.add(number, songs);
  11. playlist.add(number,artists);
  12. number++;
  13. }
  14. System.out.println(playlist);
  15. }
  16. public static void main(String[] args) {
  17. songs.add("Skinny Love");
  18. songs.add("Happier");
  19. songs.add("Sometimes");
  20. artists.add("Birdy");
  21. artists.add("Ed Sheeran");
  22. artists.add("Chelsea Cutler");
  23. Merge();
  24. }
  25. }
英文:

There are no errors but it still won't work. I can't figure out what's wrong. We still haven't discussed the concept of nodes in class so I have trouble understanding it.

It's output should be:

Skinny Love- Birdy

Happier- Ed Sheeran

Someday- Chelsea Cutler

  1. public class HandsOnAct1 {
  2. static LinkedList songs = new LinkedList();
  3. static LinkedList artists = new LinkedList();
  4. static LinkedList playlist = new LinkedList();
  5. public static void Merge(){
  6. int element= songs.size();
  7. int number=0;
  8. System.out.println(element);
  9. if (number !=element){
  10. playlist.add(number, songs);
  11. playlist.add(number,artists);
  12. number++;
  13. }
  14. System.out.println(playlist);
  15. }
  16. public static void main(String[] args) {
  17. songs.add("Skinny Love");
  18. songs.add("Happier");
  19. songs.add("Sometimes");
  20. artists.add("Birdy");
  21. artists.add("Ed Sheeran");
  22. artists.add("Chelsea Cutler");
  23. Merge();
  24. }
  25. }

答案1

得分: 0

这是一个使用递归的示例,正如我理解的那样,这是一个先决条件。

  1. static LinkedList<String> songs = new LinkedList<>();
  2. static LinkedList<String> artists = new LinkedList<>();
  3. static LinkedList<String> playlist = new LinkedList<>();
  4. songs.add("Skinny Love");
  5. songs.add("Happier");
  6. songs.add("Sometimes");
  7. artists.add("Birdy");
  8. artists.add("Ed Sheeran");
  9. artists.add("Chelsea Cutler");
  10. int index = 0;
  11. static void merge() {
  12. // 如果需要的话,可以进行检查
  13. if (index >= artists.size()){
  14. return;
  15. }
  16. playlist.add(songs.get(index) + " - " + artists.get(index));
  17. System.out.println(playlist.get(index));
  18. index++;
  19. merge();
  20. }
  21. merge();

你自己的代码的主要问题在于,你需要从内部再次调用merge函数,并且要么像我所做的那样将索引移到函数外部,要么将其作为参数传入,比如public static void merge(int index)。然后你可以像这样从内部调用它:merge(index++)

这可能是一个观点问题。(如果你愿意,你可以阅读关于纯函数/非纯函数和命令式/函数式编程的内容,这是其中的区别。)

英文:

Here is an example using recursion as i understand it was a pre-requisite?

  1. static LinkedList&lt;String&gt; songs = new LinkedList&lt;&gt;();
  2. static LinkedList&lt;String&gt; artists = new LinkedList&lt;&gt;();
  3. static LinkedList&lt;String&gt; playlist = new LinkedList&lt;&gt;();
  4. songs.add(&quot;Skinny Love&quot;);
  5. songs.add(&quot;Happier&quot;);
  6. songs.add(&quot;Sometimes&quot;);
  7. artists.add(&quot;Birdy&quot;);
  8. artists.add(&quot;Ed Sheeran&quot;);
  9. artists.add(&quot;Chelsea Cutler&quot;);
  10. int index = 0;
  11. static void merge() {
  12. // if you want/need checks
  13. if ( index &gt;= artists.size()){
  14. return;
  15. }
  16. playlist.add(songs.get(index) + &quot; - &quot; + artists.get(index));
  17. System.out.println(playlist.get(index));
  18. index++;
  19. merge();
  20. }
  21. merge();

the main issue with your own code is that you need to call merge again from inside it and either move the index outside the function as i have done or take it in as a parameter like public static void merge(int index). you will then call it from inside like merge(index++).

That's a matter of opinion i guess. (if you want you can read on pure/impure functions and imperative/functional programming which is the difference)

huangapple
  • 本文由 发表于 2020年10月12日 06:58:56
  • 转载请务必保留本文链接:https://go.coder-hub.com/64309822.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定