数据存储在节点(node)中,对于链表而言,有2部分
1 class Node{ 2 public E e; //一部分存储真正的数据 3 public Node next; //另一部分,next是Node类型的对象,换言之,next本身又是一个节点,next指向的是当前节点的下一个节点。 4 }
对于链表来说就像火车一样,每一个节点其实就是一节车厢,在车厢中存储真正的数据,而车厢和车厢之间还要进行连接,以使得数据是整合在一起的,用户可以方便的在所有数据上进行查询等其他的操作,那么数据和数据之间的连接就是有next来完成。
链表优点:真正的动态,不需要处理固定容量的问题。
缺点:丧失了随机访问的能力。每一个节点所在的内存的位置是不同的。
1 //创建一个类LinkedList,目的是在LinkedList中实现链表数据结构。要求支持泛型,在LinkedList后加上<E> 2 public class LinkedList<E> { 3 4 ...... 5 6 }
1 public class LinkedList<E> { //在LinkedList中实现链表数据结构。要求支持泛型,在LinkedList后加上<E> 2 //链表是由一个一个节点所组成的,数据存储在节点(node)中,对于链表而言,有2部分 3 private class Node{ //将节点Node设置成LinkedList的内部类,同时这个Node设置成私有的,换言之,只有在链表这个数据结构内可以访问node,而在链表这个结构外是无法访问到node的。 4 //定义Node变量 5 public E e; //一部分存储真正的数据 6 public Node next; //另一部分,next是Node类型的对象,换言之,next本身又是一个节点,next指向的是当前节点的下一个节点。 7 //构造函数 8 public Node(E e, Node next){ //构造函数的2个参数和Node节点中传来变量的2个变量名重名( public E e和public Node next),所以需要写this.e, this.next,表示节点所拥有的 9 this.e = e; //将当前的节点e赋值成用户传来的e,其中左边this.e表示节点的e,等号右边是用户传来的e 10 this.next = next;//将当前节点的next赋值成用户传来的next 11 } 12 13 public Node(E e){ 14 this(e, null); 15 }// 构造函数,如果用户只传来一个e,此时就调用具有2个参数的构造方法,第一个参数传用户传来的e,第二个参数赋值为空 16 17 public Node(){ 18 this(null, null); 19 } //构造函数,如果用户什么都不传 20 21 @Override //对于链表的每一个节点来说,相应的设置一个他们父类对应的toString函数,来方便后期打印输出 22 public String toString(){ 23 return e.toString(); 24 } 25 } 26 27 }