我一直在研究练习题。我的想法是,我应该采用链表,然后将一元变换器应用于列表,并返回修改后的列表。我没有应用特定的更改,只是处理并返回链接列表。以下是细分,以及说明提供的UnaryTransformer方法:
“如果L是该类型对象的链接列表的头部 Q和R是一个UnaryTransformer,然后transformAll(L,R)是通过将R应用于每个而获得的对象的链接列表 L中的对象按顺序排列。“
{@code UnaryTransformer} objects are used to represent functions with the signature:
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;
}
}
答案 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
是列表的通用类型。