我试图在不删除原始队列中的元素的情况下克隆队列。我用自己的节点类实现了一个队列类(我仅显示具有特定功能的队列类(:
public class Queue<T>
{
private Node<T> first;
private Node<T> last;
public Queue()
{
this.first = null;
this.last = null;
}
public boolean isEmpty()
{
return this.first == null;
}
public void insert(T x)
{
if (this.last == null)
{
this.last = new Node<T>(x);
this.first = this.last;
}
else
{
this.last.setNext(new Node<T>(x));
this.last = this.last.getNext();
}
}
public T remove()
{
T res = this.first.getInfo();
this.first = this.first.getNext();
if (this.first == null)
this.last = null;
return res;
}
}
我试图克隆的方式:
public static Queue<Integer> cloneQueue(Queue<Integer> q)
{
Queue<Integer> q1 = new Queue<Integer>();
Queue<Integer> pos = q;
while (!pos.isEmpty())
{
q1.insert(pos.remove());
}
return q1;
}
我对克隆功能的问题是该行中同一指针的比较:
Queue<Integer> pos = q;
如何解决问题,而不影响主要功能的原始队列?
您自己的队列实现有特定原因吗?您可以简单地使用标准Java实现。如果您想拥有自己的界面,可以随时将Java.util.queue包装在您自己的队列中。
public class Queue<T> {
private java.util.Deque<T> queue = new ArrayDeque<>();
public boolean isEmpty() {
return this.queue.isEmpty();
}
public void insert(T x) {
this.queue.offerLast(x);
}
public T remove() {
return this.queue.poll();
}
public static <T> Queue<T> cloneQueue(Queue<T> q) {
Queue<T> clone = new Queue<T>();
clone.queue = new ArrayDeque<T>(q.queue);
return clone;
}
}