克隆队列无需删除原始队列[Java]的元素



我试图在不删除原始队列中的元素的情况下克隆队列。我用自己的节点类实现了一个队列类(我仅显示具有特定功能的队列类(:

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;
    }
}

最新更新