【问题标题】: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)。

    【讨论】:

    • 问题指出不能使用额外的集合作为存储的助手。
    猜你喜欢
    • 1970-01-01
    • 2015-07-04
    • 2018-09-20
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多