|
@@ -0,0 +1,103 @@
|
|
|
+package com.sf.javase;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.LinkedList;
|
|
|
+
|
|
|
+public class LinkedListMain<E> {
|
|
|
+
|
|
|
+ public static void main(String[] args) {
|
|
|
+ ArrayList<String> list1 = new ArrayList<>();
|
|
|
+ list1.add("a");
|
|
|
+
|
|
|
+ LinkedList<String> list = new LinkedList<>();
|
|
|
+ list.add("a");
|
|
|
+
|
|
|
+
|
|
|
+ list.add(0, "b");
|
|
|
+
|
|
|
+ LinkedListMain<String> myList = new LinkedListMain<>();
|
|
|
+ myList.add("a");
|
|
|
+ myList.add("b");
|
|
|
+ System.out.println(myList);
|
|
|
+ }
|
|
|
+
|
|
|
+ public boolean add(E e) {
|
|
|
+
|
|
|
+ Node<E> l = last;
|
|
|
+
|
|
|
+ Node<E> newNode = new Node<>(l, e, null);
|
|
|
+
|
|
|
+ last = newNode;
|
|
|
+
|
|
|
+ if (l == null) {
|
|
|
+
|
|
|
+ head = newNode;
|
|
|
+ } else {
|
|
|
+
|
|
|
+ l.next = newNode;
|
|
|
+ }
|
|
|
+ size++;
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void add(int index, E e) {
|
|
|
+
|
|
|
+
|
|
|
+ if (index == size) {
|
|
|
+ add(e);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ Node<E> curr = node(index);
|
|
|
+
|
|
|
+ Node<E> prev = curr.prev;
|
|
|
+
|
|
|
+ Node<E> newNode = new Node<>(prev, e, curr);
|
|
|
+ curr.prev = newNode;
|
|
|
+ if (prev != null) prev.next = newNode;
|
|
|
+
|
|
|
+ else head = newNode;
|
|
|
+ size++;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public Node<E> node(int index) {
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if (index < (size >> 1)) {
|
|
|
+
|
|
|
+ Node<E> x = head;
|
|
|
+ for (int i = 0; i < index; i++) {
|
|
|
+ x = x.next;
|
|
|
+ }
|
|
|
+ return x;
|
|
|
+ } else {
|
|
|
+
|
|
|
+ Node<E> x = last;
|
|
|
+ for (int i = size - 1; i > index; i--) {
|
|
|
+ x = x.prev;
|
|
|
+ }
|
|
|
+ return x;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private Node<E> head;
|
|
|
+ private Node<E> last;
|
|
|
+
|
|
|
+ private int size;
|
|
|
+
|
|
|
+
|
|
|
+ private static class Node<E> {
|
|
|
+ E item;
|
|
|
+ Node<E> next;
|
|
|
+ Node<E> prev;
|
|
|
+
|
|
|
+ Node(Node<E> prev, E element, Node<E> next) {
|
|
|
+ this.item = element;
|
|
|
+ this.next = next;
|
|
|
+ this.prev = prev;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|