题解 | #双端队列设计# 双向链表实现
双端队列设计
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; } } }