package linklist;/** * @Title: LinkedListDemo * @ProjectName demo */public class LinkedListDemo{ private class Node { private E e; private Node next; public Node(E e, Node next) { this.e = e; this.next = next; } public Node(E e) { this(e, null); } public Node() { this(null, null); } @Override public String toString() { return e.toString(); } } private int size; private Node dummyHead; public LinkedListDemo() { size = 0; dummyHead = new Node(); } public int getSize() { return this.size; } public boolean isEmpty() { return size == 0; } public void add(int index, E e) { if (index < 0 || index > size) { throw new IllegalArgumentException("add error index."); } Node prev = dummyHead; for (int i = 0; i < index; i++) { prev = prev.next; } prev.next = new Node(e, prev.next); size ++; } public void addFirst(E e) { add(0, e); } public void addLast(E e) { add(size, e); } public E remove(int index) { if (index < 0 || index >= size) { throw new IllegalArgumentException("remove error index."); } Node prev = dummyHead; for (int i = 0; i < index; i++) { prev = prev.next; } Node curNode = prev.next; prev.next = curNode.next; curNode.next = null; return curNode.e; } public E removeFirst() { return remove(0); } public E removeLast() { return remove(size - 1); } public void removeElement(E e){ Node prev = dummyHead; while (prev.next != null) { if (prev.next.e.equals(e)) { break; } prev = prev.next; } if (prev.next != null) { Node delNode = prev.next; prev.next = delNode.next; delNode.next = null; size --; } } public void set(int index, E e) { if (index < 0 || index > size) { throw new IllegalArgumentException("set error index"); } Node cur = dummyHead.next; for (int i = 0; i < index; i++) { cur = cur.next; } cur.e = e; } public E get(int index) { if (index < 0 || index >= size) { throw new IllegalArgumentException("Get error index"); } Node cur = dummyHead.next; for (int i = 0; i < index; i++) { cur = cur.next; } return cur.e; } public E getFirst() { return get(0); } public E getLast() { return get(size - 1); } public boolean contains(E e) { Node cur = dummyHead.next; while (cur != null) { if (cur.e.equals(e)) { return true; } cur = cur.next; } return false; } @Override public String toString() { StringBuilder sb = new StringBuilder(); for (Node cur = dummyHead.next; cur != null; cur = cur.next) { sb.append(cur.toString() + "--->"); } sb.append("NULL"); return sb.toString(); }}