我有讲课的练习题,我不知道如何解决,并希望了解应该做什么和解释:
问:为方法removeNulls(q)提供代码,该方法从队列q中删除所有null元素。方法main包含一个简单的例子,说明方法removeNulls的效果。
package labsSGTsCoursework.cw1;
import net.datastructures.NodeQueue;
import net.datastructures.Queue;
public class CW1_q4 {
public static <E> void removeNulls( Queue<E> q) {
... // YOUR CODE REPLACES DOTS HERE
}
public static void main(String[] args) {
// test method removeNulls
Queue<Integer> que = new NodeQueue<Integer>();
que.enqueue(5);
que.enqueue(null);
que.enqueue(8);
que.enqueue(2);
que.enqueue(null);
System.out.println(que); // should print: "(5, null, 8, 2, null)"
removeNulls(que);
System.out.println(que); // should print: "(5, 8, 2)"
}
}
答案 0 :(得分:0)
抱歉,我没有注意到它是通用的,所以标记方法不起作用(有时我认为这是一个有用的技巧,所以我把它留在下面)。
在方法内部,创建一个新队列,将所有非空值从旧的队列复制到新队列,然后再返回到原始队列(因为这些值是从原始队列中消耗的,所以你需要将它们放回去)。
对于非泛型方法,标记方法可能有效(只要某些值永远不会在输入中出现): 插入一个标记,例如Integer.MAX_VALUE,遍历que并插回所有非空元素,一旦遇到标记就停止。