【问题标题】:How do I merge linked list alternately without using nodes? and by using recursion?如何在不使用节点的情况下交替合并链表?并使用递归?
【发布时间】:2021-01-26 07:01:40
【问题描述】:

没有错误,但仍然无法正常工作。我不知道出了什么问题。我们还没有在课堂上讨论节点的概念,所以我很难理解它。

它的输出应该是:

Skinny Love-Birdy

Happier- Ed Sheeran

有一天-切尔西卡特勒

public class HandsOnAct1 {

  static LinkedList songs = new LinkedList();
  static LinkedList artists = new LinkedList();
  static LinkedList playlist = new LinkedList();
  
  public static void Merge(){
      int element= songs.size();
      int number=0;
      
      System.out.println(element);
      
  if (number !=element){
  playlist.add(number, songs);
  playlist.add(number,artists);
  number++;
  
  }
      System.out.println(playlist);
  }
  

    public static void main(String[] args) {
 
        songs.add("Skinny Love");
        songs.add("Happier");
        songs.add("Sometimes");
        
        artists.add("Birdy");
        artists.add("Ed Sheeran");
        artists.add("Chelsea Cutler");
        
        Merge();    
    }
    
}

【问题讨论】:

  • 欢迎来到 SO!你期待什么输出?顺便说一句,将参数传递给Merge 函数而不是让它在一组固定的全局变量上运行是一个更好的设计。返回结果并让调用者打印,以便函数可重用。
  • @ggorlen 输出应该是: Skinny Love- Birdy Happier- Ed Sheeran Someday- Chelsea Cutler 好的,我会尝试您的建议。希望我能让它工作。非常感谢h
  • 您可以编辑您的帖子以完全显示它应该在控制台上显示的内容。作为评论很难阅读。谢谢。您的代码似乎想使用循环来遍历列表,但我没有看到任何循环。此外,最好在列表中使用泛型。
  • @ggorlen 对于此活动,我们面临的挑战是不要使用循环/迭代,而是使用任何递归方法。这就是我遇到很多麻烦的原因;-;
  • 这很好,但是您可以在链表上使用递归来破坏堆栈,因此这是一个值得商榷的设计选择。当深度不是直线时,递归是最好的。如果您必须使用递归,则需要从其内部调用Merge,这是您真正需要/需要参数的地方。我建议编辑您的帖子以说明您的要求(您需要使用递归)。

标签: java merge linked-list


【解决方案1】:

这是一个使用递归的示例,因为我理解它是一个先决条件?

static LinkedList<String> songs = new LinkedList<>();
static LinkedList<String> artists = new LinkedList<>();
static LinkedList<String> playlist = new LinkedList<>();

songs.add("Skinny Love");
songs.add("Happier");
songs.add("Sometimes");

artists.add("Birdy");
artists.add("Ed Sheeran");
artists.add("Chelsea Cutler");

int index = 0;
static void merge() {

    // if you want/need checks
    if ( index >= artists.size()){
        return;
    }

    playlist.add(songs.get(index) + " - " + artists.get(index));
    System.out.println(playlist.get(index));
    index++;
    merge();
}

merge();

您自己的代码的主要问题是您需要从它内部再次调用合并,或者像我所做的那样将索引移到函数之外,或者将它作为public static void merge(int index) 之类的参数接收。然后你会像merge(index++)一样从内部调用它。

我猜这是见仁见智的问题。 (如果你愿意,你可以阅读纯/不纯函数和命令式/函数式编程,这是不同的)

【讨论】:

  • 非常感谢 T^T 现在我明白了@niclaslindgren。你今天救了我的命哈哈
  • @ZeyZey 我很高兴听到。请考虑将答案标记为已接受
猜你喜欢
  • 2017-02-01
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
  • 2021-12-15
  • 2014-03-01
  • 2018-06-21
  • 2018-06-19
  • 2020-05-04
相关资源
最近更新 更多