List.java
- package linkedList;
-
- public interface List
{ -
- boolean add(E e);
-
- boolean addFirst(E e);
-
- boolean addLast(E e);
-
- boolean remove(Object o);
-
- E get(int index);
-
- void printLinkList();
- }
LinkedList.java
- package linkedList;
-
- public class LinkedList
implements List { -
- Node
first; -
- Node
last; -
- int size;
-
- private static class Node
{ -
- E item;
-
- Node
next; -
- Node
prev; -
- public Node(Node
prev, E element, Node next) { - this.item = element;
- this.next = next;
- this.prev = prev;
- }
- }
-
- void linkFirst(E e) {
- final Node
f = first; - final Node
newNode = new Node<>(null, e, f); - first = newNode;
- if (f == null) {
- last = newNode;
- } else {
- f.prev = newNode;
- }
- size++;
- }
-
- void linkLast(E e) {
- final Node
l = last; - final Node
newNode = new Node<>(l, e, null); - last = newNode;
- if (l == null) {
- first = newNode;
- } else {
- l.next = newNode;
- }
- size++;
- }
-
- E unlink(Node
x) { - final E element = x.item;
- final Node
next = x.next; - final Node
prev = x.prev; - if (prev == null) {
- first = next;
- } else {
- prev.next = next;
- x.prev = null;
- }
- if (next == null) {
- last = prev;
- } else {
- next.prev = prev;
- x.next = null;
- }
- x.item = null;
- size--;
- return element;
- }
-
- @Override
- public boolean add(E e) {
- linkLast(e);
- return true;
- }
-
- @Override
- public boolean addFirst(E e) {
- linkFirst(e);
- return true;
- }
-
- @Override
- public boolean addLast(E e) {
- linkLast(e);
- return true;
- }
-
- @Override
- public boolean remove(Object o) {
- if (o == null) {
- for (Node
x = first; x != null; x = x.next) { - if (x.item == null) {
- unlink(x);
- return true;
- }
- }
- } else {
- for (Node
x = first; x != null; x = x.next) { - if (o.equals(x.item)) {
- unlink(x);
- return true;
- }
- }
- }
-
- return false;
- }
-
- @Override
- public E get(int index) {
- return node(index).item;
- }
-
- @Override
- public void printLinkList() {
- if (this.size == 0) {
- System.out.println("链表为空");
- } else {
- Node
temp = first; - System.out.print("目前的列表,头节点:" + first.item + " 尾节点:" + last.item + " 整体:");
- while (temp != null) {
- System.out.print(temp.item + ",");
- temp = temp.next;
- }
- System.out.println();
- }
- }
-
- Node
node(int index) { - if (index < (size >> 1)) {
- Node
x = first; - for (int i = 0; i < index; i++) {
- x = x.next;
- }
- return x;
- } else {
- Node
x = last; - for (int i = size - 1; i > index; i--) {
- x = x.prev;
- }
- return x;
- }
- }
- }
- public static void main(String[] args) {
- var list = (List
) new LinkedList(); - list.add("a");
- list.addFirst("b");
- list.addLast("c");
- list.printLinkList();
- list.addFirst("d");
- list.remove("b");
- list.printLinkList();
- }