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;
}
}