/** * An implementation of the Linked List data structure. * * The LinkedList is like the ArrayList, except the list's * elements are stored in linked nodes instead of an array. * * @param component type */ public class LinkedList { public static void main(String[] args) { LinkedList list = new LinkedList<>(); for (int i = 2; i <= 20; i += 2) list.add(i); System.out.println(list); System.out.println(list.get(4)); // should print 10 } // The list's elements are stored in nodes. private class Node { E element; // Element stored in this node Node next; // Link to the next node in the list } private Node head; // Link to the first node private Node tail; // Link to the last node private int size; // Number of elements in the list public void add(E elem) { Node n = new Node(); n.element = elem; if (head == null) head = tail = n; else { tail.next = n; tail = n; } size++; } public void add(int index, E elem) { if (index < 0 || index > size) throw new IndexOutOfBoundsException( index + "" ); Node n = new Node(); n.element = elem; if (index == 0) { n.next = head; head = n; if (tail == null) tail = n; } else { Node walker = head; for (int i = 0; i < index - 1; i++) { walker = walker.next; } n.next = walker.next; walker.next = n; if (n.next == null) tail = n; } size++; } public E get(int index) { if (index < 0 || index >= size) throw new IndexOutOfBoundsException( index + "" ); Node walker = head; for (int i = 0; i < index; i++) walker = walker.next; return walker.element; } public void set(int index, E element) { if (index < 0 || index >= size) throw new IndexOutOfBoundsException( index + "" ); Node walker = head; for (int i = 0; i < index; i++) walker = walker.next; walker.element = element; } public E get(E element) { Node walker = head; for (int i = 0; i < size; i++) { if (walker.element.equals(element)) { return walker.element; } walker = walker.next; } return null; } public boolean contains(E element) { Node walker = head; for (int i = 0; i < size; i++) { if (walker.element.equals(element)) { return true; } walker = walker.next; } return false; } public int size() { return size; } @Override public String toString() { if (head == null) return "[]"; else { String s = "["; Node walker = head; while (walker != tail) { s += walker.element + ", "; walker = walker.next; } s += tail.element + "]"; return s; } } }