Files
DEV/DEV3.2/ancien_controle/SimpleDeque.java

106 lines
2.2 KiB
Java
Raw Normal View History

2025-03-31 10:06:09 +02:00
public class SimpleDeque<T> implements MinimalDeque<T> {
private static class Node<T> {
T value;
Node<T> next;
Node<T> prev;
Node(T value) {
this.value = value;
}
}
private Node<T> head;
private Node<T> tail;
private int size;
public SimpleDeque() {
head = null;
tail = null;
size = 0;
}
@Override
public void addFirst(T element) {
Node<T> newNode = new Node<>(element);
if (isEmpty()) {
head = tail = newNode;
} else {
newNode.next = head;
head.prev = newNode;
head = newNode;
}
size++;
}
@Override
public void addLast(T element) {
Node<T> newNode = new Node<>(element);
if (isEmpty()) {
head = tail = newNode;
} else {
newNode.prev = tail;
tail.next = newNode;
tail = newNode;
}
size++;
}
@Override
public T removeFirst() {
if (isEmpty()) {
throw new IllegalStateException("Deque is empty");
}
T value = head.value;
head = head.next;
if (head != null) {
head.prev = null;
} else {
tail = null;
}
size--;
return value;
}
@Override
public T removeLast() {
if (isEmpty()) {
throw new IllegalStateException("Deque is empty");
}
T value = tail.value;
tail = tail.prev;
if (tail != null) {
tail.next = null;
} else {
head = null;
}
size--;
return value;
}
@Override
public T peekFirst() {
if (isEmpty()) {
return null;
}
return head.value;
}
@Override
public T peekLast() {
if (isEmpty()) {
return null;
}
return tail.value;
}
@Override
public boolean isEmpty() {
return size == 0;
}
@Override
public int size() {
return size;
}
}