题解 | #双端队列设计# 双向链表实现

双端队列设计

https://www.nowcoder.com/practice/54ebef63058242459194a2bd1e04a908

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * @param operations int整型二维数组
     * @param k          int整型
     * @return int整型一维数组
     */
    public int[] performOperations(int[][] operations, int k) {
        // write code here
        Queue queue = new Queue(k);
        int[] res = new int[operations.length];
        for (int i = 0; i < operations.length; i++) {
            switch (operations[i][0]) {
                case 1:
                    if (!queue.addFirst(operations[i][1])) {
                        res[i] = -1;
                    }
                    break;
                case 2:
                    if (!queue.addLast(operations[i][1])) {
                        res[i] = -1;
                    }
                    break;
                case 3:
                    if (!queue.deleteFirst()) {
                        res[i] = -1;
                    }
                    break;
                case 4:
                    if (!queue.deleteLast()) {
                        res[i] = -1;
                    }
                    break;
                case 5:
                    res[i] = queue.getFirst();
                    break;
                case 6:
                    res[i] = queue.getLast();
                    break;
            }
        }
        return res;
    }

    private class Queue {
        private class Node {
            int val;
            Node pre;
            Node next;

            Node(int val) {
                this.val = val;
                pre = null;
                next = null;
            }
        }
        int maxLength;
        Node head;
        Node rear;
        int length;

        Queue(int maxLength) {
            head = new Node(0);
            rear = new Node(0);
            head.next = rear;
            rear.pre = head;
            length = 0;
            this.maxLength = maxLength;
        }
        boolean addFirst(int val) {
            if (length == maxLength) {
                return false;
            }
            Node next= head.next;
            Node cur = new Node(val);
            cur.pre = head;
            cur.next = next;
            head.next = cur;
            next.pre = cur;
            length++;
            return true;
        }
        boolean addLast(int val) {
            if (length == maxLength) {
                return false;
            }
            Node pre = rear.pre;
            Node cur = new Node(val);
            cur.pre = pre;
            cur.next = rear;
            pre.next = cur;
            rear.pre = cur;
            length++;
            return true;
        }
        int getFirst() {
            if (length == 0) {
                return -1;
            }
            return head.next.val;
        }
        int getLast() {
            if (length == 0) {
                return -1;
            }
            return rear.pre.val;
        }
        boolean deleteFirst() {
            if (length == 0) {
                return false;
            }
            Node next = head.next.next;
            head.next = next;
            next.pre = head;
            length--;
            return true;
        }
        boolean deleteLast() {
            if (length == 0) {
                return false;
            }
            Node pre = rear.pre.pre;
            pre.next = rear;
            rear.pre = pre;
            length--;
            return true;
        }
        boolean isEmpty() {
            return length==0;
        }
        boolean isFull() {
            return length == maxLength;
        }
    }
}

全部评论

相关推荐

mq2:我倒是觉得这种敞亮一点好。能接受就去不能就不去呗。 完了跟现在“正常”公司一样,hr说的天花乱坠,进去一看根本就是996核动力牛马,想走又没应届生身份了。岂不是更糟。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务