【问题标题】:Duplicate the Queue Elements in java在java中复制队列元素
【发布时间】:2020-10-11 12:51:01
【问题描述】:
编写一个名为 doubleQueue() 的函数,它接受对整数队列的引用作为参数
并将每个元素替换为自身的两个副本。
例如,如果一个名为 q 的队列存储了 {11,12,13},则调用 doubleQueue(q);应将其更改为存储 {11, 11, 12, 12, 13, 13}。
约束:不要使用任何辅助集合作为存储。
【问题讨论】:
标签:
java
data-structures
queue
priority-queue
【解决方案1】:
在不使用任何辅助集合的情况下,Queue 需要是 LinkedList。然后,您可以向后迭代它并将每个元素添加到它自己的前面。
import java.util.Queue;
import java.util.LinkedList;
import java.lang.RuntimeException;
class Main {
public static void main(String[] args) {
Queue<Integer> queue = new LinkedList<Integer>();
queue.add(1);
queue.add(2);
queue.add(3);
doubleQueue(queue);
System.out.println(queue);
}
public static void doubleQueue(Queue<Integer> queue) {
if (!(queue instanceof LinkedList))
throw new RuntimeException("Queue needs to be of type LinkedList.");
LinkedList<Integer> list = (LinkedList<Integer>) queue;
for (int i = list.size(); i > 0; i--) {
list.add(i, list.get(i - 1));
}
}
}
【解决方案2】:
一种方法是制作队列的副本,然后将其与原始队列合并。
如果队列是使用linkedList实现的,那么您可以使用clone()创建一个浅拷贝,然后将其与原始副本合并。
或者您可以使用linkedList创建一个数组,然后将该数组附加到linkedlist的末尾,然后对linkedList进行排序(或者将整个转换为数组,然后对数组进行排序,然后再转换回linkedlist)。