public class LinkedList<E> implements IList<E> { private Node<E> head; private int size; private static class Node<E> { public final E data; public Node<E> next; public Node(E data) { this(data, null); } public Node(E data, Node<E> next) { this.data = data; this.next = next; } } @Override public int size() { return this.size; } @Override public void set(int idx, E elem) { if (idx >= this.size || idx < 0) { throw new IllegalArgumentException(); } } @Override public E get(int idx) { return null; } @Override public void clear() { this.head = null; this.size = 0; } @Override public void add(int idx, E elem) { if (idx > this.size || idx < 0) { throw new IllegalArgumentException(); } } @Override public void add(E elem) { if (this.head == null) { this.head = new Node<>(elem); } else { // Write only the else in C16 // I AM ABOUT TO WRITE CODE THAT DOESN'T WORK // BEWARE!! /* Node<E> curr = this.head; while (curr.next != null) { curr = curr.next; } curr.next = new Node<>(elem); */ Node<E> curr; for (curr = this.head; curr.next != null; curr = curr.next) { } } this.size++; } }