Untitled
unknown
plain_text
9 months ago
1.8 kB
7
Indexable
package deques;
/**
* @see Deque
*/
public class LinkedDeque<T> extends AbstractDeque<T> {
private int size;
// IMPORTANT: Do not rename these fields or change their visibility.
// We access these during grading to test your code.
Node<T> front;
Node<T> back;
// Feel free to add any additional fields you may need, though.
public LinkedDeque() {
size = 0;
front = new Node<>(null, null, null);
back = new Node<>(null, null, null);
front.next = back;
back.prev = front;
}
public void addFirst(T item) {
Node<T> newNode = new Node<>(item, front, front.next);
front.next.prev = newNode;
front.next = newNode;
size++;
}
public void addLast(T item) {
Node<T> newNode = new Node<>(item, back.prev, back);
back.prev.next = newNode;
back.prev = newNode;
size++;
}
public T removeFirst() {
if (size == 0) {
return null;
}
Node<T> first = front.next;
T value = first.value;
front.next = first.next;
first.next.prev = front;
size--;
return value;
}
public T removeLast() {
if (size == 0) {
return null;
}
Node<T> last = back.prev;
T value = last.value;
back.prev = last.prev;
last.prev.next = back;
size--;
return value;
}
public T get(int index) {
if (index < 0 || index >= size) {
return null;
}
Node<T> curr = front.next;
for (int i = 0; i < index; i++) {
curr = curr.next;
}
return curr.value;
}
public int size() {
return size;
}
}
Editor is loading...
Leave a Comment