将一元变压器应用于链表

时间:2018-02-18 18:02:30

标签: java linked-list singly-linked-list unary-function

我一直在研究练习题。我的想法是,我应该采用链表,然后将一元变换器应用于列表,并返回修改后的列表。我没有应用特定的更改,只是处理并返回链接列表。以下是细分,以及说明提供的UnaryTransformer方法:

“如果L是该类型对象的链接列表的头部 Q和R是一个UnaryTransformer,然后transformAll(L,R)是通过将R应用于每个而获得的对象的链接列表 L中的对象按顺序排列。“

{@code UnaryTransformer} objects are used to represent functions with the signature:

enter image description here

public interface UnaryTransformer<Q> {
      /**
       * Returns the result of applying a function modeled by
       * {@code UnaryTransformer} to the given object
       *
       * @param object the object to transform
       * @return the result of applying a function
       */
    Q apply(Q object);
}

到目前为止,我有这段代码,但它没有编译。

public static transformAll(Node L, R) {
    if (L != null) {
    LinkedList<Q> sequence = new LinkedList<Q>();

    for (int i = 0; i < size(); i++) {
        if (p.apply(get(i))){
            sequence.add(get(i));
            }
        }
return sequence;
    }
} 

1 个答案:

答案 0 :(得分:0)

你很亲密!假设您的get方法在索引LinkedList返回i的元素,调用它两次将返回相同的元素,无论它是否已映射。您应该将R.apply的结果直接传递给新的LinkedList,以确保 映射:

public LinkedList<Q> transformAll(Node L, UnaryTransformer<Q> R) {
    if (L == null) {
        return null;
    }

    LinkedList<Q> sequence = new LinkedList<>();

    for (int i = 0; i < size(); i++) {
        sequence.add(R.apply(get(i)));
    }

    return sequence;
}

请注意,get的{​​{1}}是LinkedList操作,因此此方法为O(n)。只需直接迭代O(n^2)就可以减轻它。

注意:这假设此方法位于LinkedList类中,LinkedList是列表的通用类型。