1、什么是链表?
● 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针连接次序实现的。
● 每一个链表都包含多个节点,节点又包含两个部分,一个是数据域(储存节点含有的信息),一个是引用域(储存下一个节点或者上一个节点的地址)。
链表分带头节点和没有头节点的链表
下图为链表在内存的存储图
//单向链表
public class Node {
public Object data; //数据域
public Node next; //存储下一个节点的地址
public Node(Object e){
this.data = e;
}
}
head -> a1 a1.next-> a2 a2.next-> a3 … a3.next -> aN
Java双向链表和单向链表差不多 每个节点 不仅指向下一个节点的数据 和 指向上一个节点的数据
//双向链表
public class Node {
public Object data; //数据域
public Node next; //存储下一个节点的地址
public Node pre; //存储上一个节点的地址
public Node(Object e){
this.data = e;
}
}
双向链表的缺点就是每次插入或删除一个链结点的时候,要处理四个链结点的引用,而不是两个,也就是上面说过的四条线,这四条线分别为:newNode.previous(新结点的上一个结点)和上一个结点的(我们这里取名为current)current.next(当前结点的下一个结点),还有newNode.next(新结点的下一个结点)以及current.next.previous(当前结点下一个结点的previous域)。