public class Test {
//链表,先进先出。双向链表结构,项目中可也会用到,其他方法自行研究。也可引申出红黑树,敬请关注我的博客
public static void main(String[] args) {
MyLinkedList linkedList = new MyLinkedList();
linkedList.add("a1");
linkedList.add("a2");
// System.out.println(linkedList.get(1)); //获取索引为1的值 打印a2
System.out.println(linkedList.toString());//打印 [a1,a2]
}
}
class MyLinkedList<E>{
Node<E> last;//只记录最后一个节点
Node<E> first;//只记录第一个节点
int size = 0;//记录节点的个数
void add(E e){
Node<E> prev = last;//当前节点的上个节点,也可理解为当前集合的最后一个节点
Node<E> node = new Node<>(prev,e,null);//当前节点
last = node;//当前节点作为最后一个节点赋给成员变量
if (prev==null){//如果当前节点的上个节点为空,则说明当前节点为第一个数
first = node;
}else {//否则上个节点的下个节点指向当前节点
prev.next = node;
}
size++;
}
public int size(){
return size;
}
@Override
public String toString() {
Node<E> node = first;
String content = "";
for (int i = 0; i < size; i++) {
if (i==0){
content = node.elment +"";
}else {
content = content + "," + node.elment;
}
node = node.next;
}
return "["+content+"]";
}
public E get(int index){
Node<E> node = first;
for (int i = 0; i < index; i++) {//
node = node.next;
}
return node.elment;
}
}
class Node<E> {
Node<E> prev;
E elment;
Node<E> next;
public Node(Node<E> prev, E e, Node<E> next){
this.prev = prev;
this.elment = e;
this.next = next;
}
}