| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- /**
- * 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 <E> component type
- */
- public class LinkedList<E> {
- public static void main(String[] args) {
- LinkedList<Integer> 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 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;
- }
- }
- }
|