目录
1. 链表简介
链表是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存储下一个节点的 指针
使用链表结构可以克服数组需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大
2. 单向链表(单链表)
单链表是链表中结构最简单的。其数据在内存中存储是不连续的,它存储的数据是分散在内存中的
- 一个单链表的节点(
Node
)分为两个部分,一部分(data
)保存关于节点的数据;另一部分(next
)存储下一个节点的地址 - 最后一个节点存储地址的部分指向空值
- 向外暴露的只有一个头节点(
Head
),我们对链表的所有操作,都是直接或者间接地通过其头节点来进行的
2.1. 单向链表的查找
单链表中,因为节点 Node
只有一个 next
指针,所以想要获取数据,只能从头节点数据开始,顺着 next
指针的指向依次往下访问,即顺序访问
2.2. 单向链表的插入及删除
插入,删除都是通过在指定节点处来进行插入,实现思路如下
- 首先遍历查找出指定的节点
- 插入和删除节点,即更改节点
Node
的next
的指向
2.3. 单向链表简单实现
public class SingleLinkList {
private int size;
private Node head;
public SingleLinkList() {
this.size = 0;
this.head = null;
}
/** 内部类节点 */
public class Node {
private Object data;// 节点数据
private Node next;// 指向下一个节点
public Node(Object data) {
this.data = data;
}
@Override
public String toString() {
return "Node{" +
"data=" + data +
", next=" + next +
'}';
}
}
@Override
public String toString() {
return "SingleLinkList{" +
"size=" + size +
", head=" + head +
'}';
}
public static void main(String[] args) {
SingleLinkList linkList = new SingleLinkList();
linkList.addHead("a");