Main.java
public class Main{
public static void main(String[] args){
linkedList linkedList = new linkedList<>();
linkedList.add("a1");
linkedList.add("a2");
linkedList.remove("a1");//或linkedList.remove(0).删除a1节点
}
}
linkedList.java(源码,只提取操作中涉及的部分)
属性
public class linkedListextends AbstractSequentialList implements List , Deque , Cloneable,java.io.Serializable { transient int size = 0; transient Node first; // 指向最后一个结点 transient Node last; }
构造方法
public class linkedListextends AbstractSequentialList implements List , Deque , Cloneable,java.io.Serializable { public linkedList() { } public linkedList(Collection extends E> c) { this(); addAll(c); } }
add方法
public class linkedListextends AbstractSequentialList implements List , Deque , Cloneable,java.io.Serializable { // eg1: e="a1" public boolean add(E e) { linkLast(e); return true; } // eg1: e="a1" void linkLast(E e) { final Node l = last; // eg1: newNode null<--"a1"-->null final Node newNode = new Node<>(l, e, null); last = newNode; // eg1: l=null if (l == null) { first = newNode; // eg1: first指向newNode } else { l.next = newNode; } size++; modCount++; } }
remove方法
public class linkedListextends AbstractSequentialList implements List , Deque , Cloneable,java.io.Serializable { 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; } // eg1: x null<--"a1"-->"a2" E unlink(Node x) { // assert x != null; final E element = x.item; final Node next = x.next; final Node prev = x.prev; if (prev == null) { first = next; // 更新first头指针为x结点的后置结点 } else { prev.next = next; // 将x的前置结点与x的后置结点相连接 x.prev = null; // 断开x的前置指针 } if (next == null) { last = prev; } else { next.prev = prev; // 将x的后置结点与x的前置结点相连接 x.next = null; // 断开x的后置指针 } x.item = null; size--; modCount++; return element; } }



