#641
Medium Algorithms Design circular deque
Array Linked List Design Queue
64.4% acceptance
Feb 20, 2026
1682
108
Design your implementation of the circular double-ended queue (deque).
Solution
Rust
Time O(2^n)
Space O(n)
struct MyCircularDeque {
data: Vec<i32>,
front: usize,
rear: usize,
size: usize,
capacity: usize,
}
impl MyCircularDeque {
fn new(k: i32) -> Self {
let cap = k as usize;
MyCircularDeque {
data: vec![0; cap],
front: 0,
rear: cap - 1,
size: 0,
capacity: cap,
}
}
fn insert_front(&mut self, value: i32) -> bool {
if self.is_full() { return false; }
self.front = (self.front + self.capacity - 1) % self.capacity;
self.data[self.front] = value;
self.size += 1;
true
}
fn insert_last(&mut self, value: i32) -> bool {
if self.is_full() { return false; }
self.rear = (self.rear + 1) % self.capacity;
self.data[self.rear] = value;
self.size += 1;
true
}
fn delete_front(&mut self) -> bool {
if self.is_empty() { return false; }
self.front = (self.front + 1) % self.capacity;
self.size -= 1;
true
}
fn delete_last(&mut self) -> bool {
if self.is_empty() { return false; }
self.rear = (self.rear + self.capacity - 1) % self.capacity;
self.size -= 1;
true
}
fn get_front(&self) -> i32 {
if self.is_empty() { -1 } else { self.data[self.front] }
}
fn get_rear(&self) -> i32 {
if self.is_empty() { -1 } else { self.data[self.rear] }
}
fn is_empty(&self) -> bool {
self.size == 0
}
fn is_full(&self) -> bool {
self.size == self.capacity
}
}