首页 > 解决方案 > 在没有临时列表、队列或其他数据结构的情况下更改 Queue 的元素

问题描述

从 Litvin 的 Java Methods 一书中做练习。一个问题要求创建一个实现 Queue 接口的 LinkedList。

莫尔斯电码消息在程序中表示为字符串队列。每个字符串由点和破折号组成。编写并测试一个方法,将每个问号(用“..--..”表示)替换为句点(“.-.-.-”),保持所有其他代码不变。不要使用任何临时列表、队列或其他数据结构。

由于 LinkedList 实现了一个队列,我无法使用 ListIterator。我不确定如何在不将它们放在临时位置的情况下更改队列中元素的值。我将如何解决这个问题?

标签: javalinked-listqueuedoubly-linked-list

解决方案


该问题可以使用一些代码来显示您当前的工作状态。但没有更多信息:

  1. 队列仅授予您通过 FIFO 设计访问第一个元素的权限。
  2. 您始终可以删除第一个元素并将其插入到后面。
  3. 如果您对队列中的所有元素执行此操作而不更改每个元素,则队列最终会处于与以前相同的状态。

因此,这将是仅使用 Queue 接口的可能解决方案:

public void replaceQuestionmarks(Queue<String> input) {
  for(int i = 0; i<input.size(); input++) {
    String current = input.remove();
    input.add(questionMarkToPeriod(current));
}

“questionMarkToPeriod”将是条件替换的一种方法。

编辑:忘记队列中的泛型类型。


推荐阅读