将一元转换器应用于链表
Apply a unary transformer to a linkedlist
我一直在做一道练习题。这个想法是我应该采用一个链表,然后将一元变换器应用于该列表,然后 return 修改后的列表。我没有应用特定的更改,只是处理和 return 一个链表。下面是分解,以及说明中提供的 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;
}
}
你很接近!假设您的 get
方法 return 是索引 i
处 LinkedList
的一个元素,调用它两次将 return 相同的元素,无论它是否被映射。您应该将 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
for LinkedList
是一个O(n)
操作,所以这个方法是O(n^2)
。它可以通过简单地直接迭代 LinkedList
来缓解。
注意:这假定此方法位于您的 LinkedList
class 中并且 Q
是列表的通用类型。
我一直在做一道练习题。这个想法是我应该采用一个链表,然后将一元变换器应用于该列表,然后 return 修改后的列表。我没有应用特定的更改,只是处理和 return 一个链表。下面是分解,以及说明中提供的 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;
}
}
你很接近!假设您的 get
方法 return 是索引 i
处 LinkedList
的一个元素,调用它两次将 return 相同的元素,无论它是否被映射。您应该将 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
for LinkedList
是一个O(n)
操作,所以这个方法是O(n^2)
。它可以通过简单地直接迭代 LinkedList
来缓解。
注意:这假定此方法位于您的 LinkedList
class 中并且 Q
是列表的通用类型。