My first solution - using ArrayList:
class MyCircularDeque { List<Integer> list = new ArrayList<>(); int k ; public MyCircularDeque(int k) { this.k = k; } public boolean insertFront(int value) { if(list.size()<k){ list.add(0, value); return true; } return false; } public boolean insertLast(int value) { if(list.size()<k){ list.add(value); return true; } return false; } public boolean deleteFront() { if(list.size()>0){ list.remove(0); return true; } return false; } public boolean deleteLast() { if(list.size()>0){ list.remove(list.size()-1); return true; } return false; } public int getFront() { if(list.size()>0){ return list.get(0); } return -1; } public int getRear() { if(list.size()>0){ return list.get(list.size()-1); } return -1; } public boolean isEmpty() { return list.size()==0; } public boolean isFull() { return list.size()==k; } }
My double linked list solution:
class MyCircularDeque { class DlinkedList{ int val; DlinkedList pre; DlinkedList next; public DlinkedList(int val){ this.val=val; } } DlinkedList list, head, tail; int k; int count=0; public MyCircularDeque(int k) { this.k = k; head = new DlinkedList(-1); tail = new DlinkedList(-1); head.next = tail; tail.pre = head; } public boolean insertFront(int value) { if(count<k){ DlinkedList node = new DlinkedList(value); node.next=head.next; node.pre = head; head.next = node; node.next.pre=node; count++; return true; } else return false; } public boolean insertLast(int value) { if(count<k){ DlinkedList node = new DlinkedList(value); node.pre= tail.pre; node.next=tail; tail.pre = node; node.pre.next=node; count++; return true; } else return false; } public boolean deleteFront() { if(count>0){ head.next.next.pre=head; head.next = head.next.next; count--; return true; }else return false; } public boolean deleteLast() { if(count>0){ tail.pre.pre.next = tail; tail.pre=tail.pre.pre; count--; return true; }else return false; } public int getFront() { if(count>0) return head.next.val; else return -1; } public int getRear() { if(count>0) return tail.pre.val; else return -1; } public boolean isEmpty() { return count==0; } public boolean isFull() { return count==k; } }