public class LinkedList{ // 节点数量 private int size; // 头节点 private Node head; public void add(E element) { add(size, element); } public void add(int index, E element) { if (index == 0) { head = new Node<>(element, head); } else { Node prev = node(index - 1); prev.next = new Node<>(element, prev.next); } size ++; } public E remove(int index) { Node node = head; if (index == 0) { head = head.next; } else { Node prev = node(index - 1); node = prev.next; prev.next = prev.next.next; } size --; return node.element; } public E set(int index, E element) { Node node = node(index); E oldElement = (E) node.element; node.element = element; return oldElement; } public E get(int index) { return node(index).element; } public int indexOf(E element) { Node node = head; if (element == null) { for (int i = 0; i < size; i ++) { if (node.element == null) return i; node = node.next; } } else { for (int i = 0; i < size; i ++) { if (node.element.equals(element)) return i; node = node.next; } } return -1; } public void clear() { size = 0; head = null; } public Node node(int index) { rangeCheck(index); Node node = head; for (int i = 0; i < index; i ++ ) { node = node.next; } return node; } private void rangeCheck(int index) { if (index < 0 || index >= size) { throw new IndexOutOfBoundsException("Index:" + index + ", Size:" + size); } } public int size() { return size; } public boolean isEmpty() { return size == 0; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("size = ").append(size).append(", ["); Node node = head; for (int i = 0; i < size; i ++) { if (i != 0) { sb.append(", "); } sb.append(node.element); node = node.next; } sb.append("]"); return sb.toString(); } private static class Node { E element; Node next; public Node(E element, Node next) { this.element = element; this.next = next; } } }



