Untitled
unknown
plain_text
9 months ago
2.1 kB
14
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.previes = front;
}
public void addFirst(T item) {
Node<T> newNode = new Node<>(item, front, front.next);
front.next.previes = newNode;
front.next = newNode;
size++;
}
public void addLast(T item) {
Node<T> newNode = new Node<>(item, back.previes, back);
back.previes.next = newNode;
back.previes = 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.previes = front;
size--;
return value;
}
public T removeLast() {
if (size == 0) {
return null;
}
Node<T> last = back.previes;
T value = last.value;
back.previes = last.previes;
last.previes.next = back;
size--;
return value;
}
public T get(int index) {
if (index < 0 || index >= size) {
return null;
}
if (index < size / 2) {
Node<T> current = front.next;
for (int i = 0; i < index; i++) {
current = current.next;
}
return current.value;
} else {
Node<T> current = back.previes;
for (int i = size - 1; i > index; i--) {
current = current.previes;
}
return current.value;
}
}
public int size() {
return size;
}
}
Editor is loading...
Leave a Comment