我正在尝试克隆队列而不从原始队列中删除元素。 我使用自己的Node类实现了一个Queue类(我只显示了只包含特定函数的Queue类):
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;
如何在不影响主函数原始队列的情况下解决问题?
答案 0 :(得分:0)
您自己的Queue实施有特殊原因吗? 您可以简单地使用标准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;
}
}