运用循环队列解题即可
class MyCircularDeque {
private int[] ring;
private int cap;
private int head;
private int tail;
/** Initialize your data structure here. Set the size of the deque to be k. */
public MyCircularDeque(int k)
{
cap=k+1;
ring=new int[cap];
}
/** Adds an item at the front of Deque. Return true if the operation is successful. */
public boolean insertFront(int value)
{
if (isFull())
return false;
head=(head+cap-1)%cap;
ring[head]=value;
return true;
}
/** Adds an item at the rear of Deque. Return true if the operation is successful. */
public boolean insertLast(int value)
{
if (isFull())
return false;
ring[tail]=value;
tail=(tail+1)%cap;
return true;
}
/** Deletes an item from the front of Deque. Return true if the operation is successful. */
public boolean deleteFront()
{
if (isEmpty())
return false;
head=(head+1)%cap;
return true;
}
/** Deletes an item from the rear of Deque. Return true if the operation is successful. */
public boolean deleteLast()
{
if (isEmpty())
return false;
tail=(tail+cap-1)%cap;
return true;
}
/** Get the front item from the deque. */
public int getFront()
{
if (isEmpty())
return -1;
return ring[head];
}
/** Get the last item from the deque. */
public int getRear()
{
if (isEmpty())
return -1;
return ring[(tail+cap-1)%cap];
}
/** Checks whether the circular deque is empty or not. */
public boolean isEmpty()
{
return head==tail;
}
/** Checks whether the circular deque is full or not. */
public boolean isFull()
{
return (tail+1)%cap==head;
}
}
/**
* Your MyCircularDeque object will be instantiated and called as such:
* MyCircularDeque obj = new MyCircularDeque(k);
* boolean param_1 = obj.insertFront(value);
* boolean param_2 = obj.insertLast(value);
* boolean param_3 = obj.deleteFront();
* boolean param_4 = obj.deleteLast();
* int param_5 = obj.getFront();
* int param_6 = obj.getRear();
* boolean param_7 = obj.isEmpty();
* boolean param_8 = obj.isFull();
*/