链表
为什么链表很重要?
链表是真正的动态数组。
是最简单的动态数据结构。
更深入的理解引用(或者指针)。
更深入的理解递归。
它可以用来辅助组成其他数据结构。
链表LinkedList
数据存储在节点(Node)中。
Class Node {
E e;
Node next;
}
优点:真正的动态,不需要处理固定容量的问题;
缺点:丧失了随机访问的能力;
数组和链表的对比:
数组最好用来索引有语义的情况;
最大的优点:支持快速查询。
链表不适用索引有语义的情况
最大的优点:动态
在链表中添加元素
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 = e; this.next = null; } public Node(){ this.e = null; this.next = null; } @Override public String toString(){ return e.toString(); } } private Node head; int size; public LinkedList(){ head = 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 ++; } //在链表的index(o-based)位置添加新的元素e //在链表中不是一个常用的操作,练习用:) public void add(int index,E e){ if(index < 0 || index > size) throw new IllegalArgumentException("Add failed.Illegal index."); if(index == 0){ addFirst(e); } else{ Node prev = head; for(int i = 0; i < index - 1; i ++){ prev = prev.next; } /*Node node = new Node(e); node.next = prev.next; prev.next = node;*/ prev.next = new Node(e,prev.next); size ++; } } //在链表末尾添加新的元素e public void addLast(E e){ add(size,e); } }