【问题标题】:"Recursive" listToString()-method in linked lists链表中的“递归”listToString() 方法
【发布时间】:2015-03-09 10:00:49
【问题描述】:

由于准备Java考试,目前正在访问一个power class,我们基本上提出了一个问题:

    class Node{    //List node
        String text;
        Node next;
    }

    class Stringbuilder{
        ...
        void append(String s) //attaches s
        String toString()     //returns the fully built String
    }

    public static String listToString(Node first){
        //TO DO
    }

我们的任务是定义listToString。我们做了一个绝对有效的迭代方法,但我对这种递归替代方法很好奇:

    public static String listToString(Node first){
        StringBuilder sb = new StringBuilder();
        if(first == null) return "";
        String result = first.text;
        return result + sb.append(first.next.text).toString();
    }

所以问题是:这行得通吗?

【问题讨论】:

  • 运行代码会回答你的问题,不是吗?
  • 给定方法中的递归在哪里?
  • 让我们提出不同的问题:如果我的考试会提出这个问题,如果我使用递归方法而不是安全的迭代方法,我会有多错?
  • 基本上它应该在最后一个返回参数中,因为我不断跳转到下一个节点并通过 StringBuilder 附加文​​本值。

标签: java string linked-list


【解决方案1】:

您发布的 listToString 方法中没有任何递归。它必须自称是递归的。

public static String listToString(Node first)
{
    if(first == null) return "";
    String result = first.text;
    return result + " " + listToString(first.next);
}

【讨论】:

  • 好吧,你说得有道理,真丢人。但是,它会起作用吗?
  • 这是一个即使是课程导师也无法安全给我的答案,这也是为什么它激发了我的好奇心。不过,我知道它现在不是递归的。
  • @LéonTheodorZuGuttenberg 我在评论中指的是我建议的答案,而不是你的代码。
  • 你对我的代码的回答是什么?
  • @LéonTheodorZuGuttenberg 您的代码只会打印列表中的前两个元素,如果列表只有一个元素,它将抛出 NullPointerException。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-07
  • 2017-01-23
  • 2021-03-25
相关资源
最近更新 更多