力扣641.设计循环双端队列

class MyCircularDeque1 {
    public Deque<Integer> deque = new LinkedList<>();
    public int size;
    public int limit;

    public MyCircularDeque1(int k) {
        limit = k;
        size = 0;
    }

    public boolean insertFront(int value) {
        if (isFull()) {
            return false;
        }else {
            deque.offerFirst(value);
            size++;
            return true;
        }
    }

    public boolean insertLast(int value) {
        if (isFull()) {
            return false;
        }else {
            deque.offerLast(value);
            size++;
            return true;
        }
    }

    public boolean deleteFront() {
        if (isEmpty()) {
            return false;
        }else {
            deque.pollFirst();
            size--;
            return true;
        }
    }

    public boolean deleteLast() {
        if (isEmpty()) {
            return false;
        }else {
            deque.pollLast();
            size--;
            return true;
        }
    }
    public int getFront() {
        return deque.isEmpty() ? -1 : deque.peekFirst();
    }
    public int getRear() {
        return deque.isEmpty() ? -1 : deque.peekLast();
    }
    public boolean isEmpty() {
        return size == 0;
    }
    public boolean isFull() {
        return size == limit;
    }
}

class MyCircularDeque2 {
    public int[] deque;
    public int l, r, size, limit;

    public MyCircularDeque2(int k) {
        deque = new int[k];
        l = r = size = 0;
        limit = k;
    }

    public boolean insertFront(int value) {
        if (isFull()) {
            return false;
        }else {
            if (isEmpty()) {
                l = r = 0;
                deque[0] = value;
            }else {
                l = l == 0 ? (limit - 1) : (l - 1);
                deque[l] = value;
            }
            size++;
            return true;
        }
    }

    public boolean insertLast(int value) {
        if (isFull()) {
            return false;
        }else {
            if (isEmpty()) {
                l = r = 0;
                deque[0] = value;
            }else {
                r = r == (limit - 1) ? 0 : (r + 1);
                deque[r] = value;
            }
            size++;
            return true;
        }
    }

    public boolean deleteFront() {
        if (isEmpty()) {
            return false;
        }else {
            l = l == (limit - 1) ? 0 : (l + 1);
            size--;
            return true;
        }
    }

    public boolean deleteLast() {
        if (isEmpty()) {
            return false;
        }else {
            r = r == 0 ? (limit - 1) : (r - 1);
            size--;
            return true;
        }
    }

    public int getFront() {
        if (isEmpty()) {
            return -1;
        }else {
            return deque[l];
        }
    }
    public int getRear() {
        if (isEmpty()) {
            return -1;
        }else {
            return deque[r];
        }
    }
    public boolean isEmpty() {
        return size == 0;
    }
    public boolean isFull() {
        return size == limit;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值