zoukankan      html  css  js  c++  java
  • Leetcode 641 设计循环双端队列

      基于双向数组实现:

    class MyCircularDeque {
    
            class Node {
                int val;
                Node pre;
                Node next;
    
                Node(int val) {
                    this.val = val;
                }
            }
    
            private final int capacity;
            private final Node head;
            private final Node end;
            private int length;
    
            /**
             * Initialize your data structure here. Set the size of the deque to be k.
             */
            public MyCircularDeque(int k) {
                this.capacity = k;
                this.head = new Node(0);
                this.end = new Node(0);
                head.next = end;
                end.pre = head;
                this.length = 0;
            }
    
            private final boolean addNodeToHead(int val) {
                if (this.length == capacity) {
                    return false;
                }
                Node node = new Node(val);
                node.next = head.next;
                node.pre = head;
                head.next.pre = node;
                head.next = node;
                this.length++;
                return true;
            }
    
            private final boolean addNodeToEnd(int val) {
                if (this.length == capacity) {
                    return false;
                }
                Node node = new Node(val);
                node.next = end;
                node.pre = end.pre;
                end.pre.next = node;
                end.pre = node;
                length++;
                return true;
            }
    
            private final boolean deleteFromHead() {
                Node node = head.next;
                if (node == end) {
                    return false;
                }
                head.next = node.next;
                node.next.pre = head;
                node.pre = node.next = null;
                node = null;
                this.length--;
                return true;
            }
    
            private final boolean deleteFromEnd() {
                Node node = end.pre;
                if (node == head) {
                    return false;
                }
                node.pre.next = end;
                end.pre = node.pre;
                node.pre = node.next = null;
                node = null;
                this.length--;
                return true;
            }
    
            /**
             * Adds an item at the front of Deque. Return true if the operation is successful.
             */
            public boolean insertFront(int value) {
                return addNodeToHead(value);
            }
    
            /**
             * Adds an item at the rear of Deque. Return true if the operation is successful.
             */
            public boolean insertLast(int value) {
                return addNodeToEnd(value);
            }
    
            /**
             * Deletes an item from the front of Deque. Return true if the operation is successful.
             */
            public boolean deleteFront() {
                return deleteFromHead();
            }
    
            /**
             * Deletes an item from the rear of Deque. Return true if the operation is successful.
             */
            public boolean deleteLast() {
                return deleteFromEnd();
            }
    
            /**
             * Get the front item from the deque.
             */
            public int getFront() {
                Node node = head.next;
                return node == end ? -1 : node.val;
            }
    
            /**
             * Get the last item from the deque.
             */
            public int getRear() {
                Node node = end.pre;
                return node == head ? -1 : node.val;
            }
    
            /**
             * Checks whether the circular deque is empty or not.
             */
            public boolean isEmpty() {
                return this.length == 0;
            }
    
            /**
             * Checks whether the circular deque is full or not.
             */
            public boolean isFull() {
                return this.length == this.capacity;
            }
        }

  • 相关阅读:
    今天是周日,一如既往的在加班
    懒出来的框架
    把Visio文档中形状信息导出到XML文件的VBA代码
    DataGridView多线程更新数据的问题的解决办法
    为VS定制一个自己的代码生成器
    安装VS2012之后自己开发的自定义工具没法使用问题的解决办法
    通过RSA进行私钥加密公钥解密算法的进一步改进
    程序员在职场 该反思了吗?
    图片与字节数组相互转换的方法
    jQuery Ajax 方法调用 Asp.Net WebService 的详细例子
  • 原文地址:https://www.cnblogs.com/niuyourou/p/13322360.html
Copyright © 2011-2022 走看看