java - Deque JAVA中的removeLast/addFirst方法

标签 java stack queue deque

我需要帮助来解决我的 removeLastaddFirst 方法。

我想不出一种方法来将元素添加到队列的头部并将头部指向该元素,因为我只能访问 head.element/head。下一步

同样,在删除最后一个对象后,我找不到引用队列尾部的方法,因为我仅限于 queue.elementqueue.next

如有任何帮助,我们将不胜感激!

public class DequeImpl implements Deque{

    private Node head;
    private Node tail;
    private int size;

    public DequeImpl(){
        head=null;
        tail=null;
        size=0;
    }

    //This is a toString
    public String toString(){
        String toSend = "";
        Node baladeur = head;
        while(baladeur != null) {
            toSend += " " + baladeur.element;
            baladeur = baladeur.next;
        }
        return toSend;
    }

    // renvoie true if empty
    public boolean isEmpty(){
        return size==0;
    }


    public int size(){
        return this.size;
    }

   //To complete ///////
    public void addFirst(Object element){
        Node element2 = new Node(element, head);
        if(isEmpty()){
            head=tail=element2;
        }
        else{

        }
        size++;
    }

    public void addLast(Object element){
        Node element3 = new Node(element, null);
        if(isEmpty()){
            head=tail=element3;
        }
        else{
            tail.next=element3;
            tail = tail.suivant;
        }
        size++;
    }

    public Object removeFirst() throws QueueEmptyException{
        if(isEmpty())throw new QueueEmptyException("");
        Object element4 = head.element;
        if(size==1){
            head=tail=null;
        }
        else{
            head=head.next;
        }
            size--;
        return element4;
    }

   //To complete ///////

    public Object removeLast()throws QueueEmptyException{
        if(isEmpty())throw new QueueEmptyException("");
        Object element5 = tail.element;
        if(size==1){
            head=tail=null;
        }
        else{
            tail.next=null;
        }
        return null;
    }

    public Object first()throws QueueEmptyException{
        if(isEmpty())throw new QueueEmptyException("");
        return head.element;

    }

    public Object last()throws QueueEmptyException{
        if(isEmpty())throw new QueueEmptyException("");
        return tail.element;
    }


    private class Node{
        private Object element;
        private Node next;

        private Node(Object element, Node next){
            this.element = element;
            this.next = next;
        }

    }
} 

最佳答案

重新分配head很容易:

Node newHead = ... whatever you do here
newHead.next = head;
head = newHead;

不过,我感觉到你尾部的疼痛。如果您没有来自 tail 的后向指针,您所能做的就是迭代整个列表,并且:

if (tail.equals(thisNode.next)) {
  thisNode.next = null;
  tail = thisNode;
  break;
}

更多上下文表明您可以迭代整个列表:

Node thisNode = head;
while (thisNode != null) {
  if (tail.equals(thisNode.next)) {
    thisNode.next = null;
    tail = thisNode;
    break;
  }
  thisNode = thisNode.next;
}

关于java - Deque JAVA中的removeLast/addFirst方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35659421/

相关文章:

java - 如何修复未处理的异常 : java. sql.SQLException 进行抛售

c++ - 运行时检查失败 #4 - 此函数保留的 _alloca 内存周围的堆栈区域已损坏?

python - 名称错误 : name 'self' is not defined - when trying to post values to different queues

java - 多键、链接哈希

go - 结构中的线程,函数参数对于新的 goroutine 来说太大

objective-c - 每次将对象添加到队列或堆栈时是否都需要创建对象的新实例? Objective-C

c - 如何打印数组头部的内容并删除

java - 使用相同的方法名称实现接口(interface)和抽象类导致通用名称冲突

java - 如何获取jsp中选择选项中选择的数据库值?

java - Camel Bindy 固定长度格式 : How to use inherited classes?