链表-真正的动态数据结构
最简单的动态数据结构。
更深入的理解引用(指针)
更深理解递归
链表Linked List
类比于火车,数据存储在火车车厢,而每节火车都需要铁链来链接从而指向下一节车厢
优点:真正的动态,不需要处理固定容量的问题
缺点:没有随机访问数据的能力
数组和链表的对比
组成链表节点的类:
public class LinkedList<E> {
private class Node{
public E e;
public Node next;
public Node(E e,Node next){
this.e=e;
this.next=next;
}
public Node(E e){
this(e,null);
}
public Node(){
this(null,null);
}
@Override
public String toString(){
return e.toString();
}
}
//private Node head;
private Node dummyHead;
private int size;
public LinkedList(){
// head=null;
dummyHead=new Node(null,null);
size=0;
}
// 获取链表中的元素个数
public int getSize(){
return size;
}
//返回链表是否为空
public boolean isEmpty(){
return size==0;
}
//在链表头添加新的元素e
public void addFirst(E e){
//Node node=new Node(e);
//node.next=head;
// head=node;
// head=new Node(e,head);
//size++;
add(0,e);
}
//在链表的index处添加新的元素e
public void add(int index,E e){
if(index<0||index>size)
throw new IllegalArgumentException("Add failed. Illegal index");
Node prev=dummyHead;
for(int i=0;i<index;i++)
prev=prev.next;
Node node=new Node(e);
node.next=prev.next;
prev.next=node;
size++;
}
//在链表末尾添加新的元素e
public void addLast(E e){
add(size,e);
}
}