定义
链表是一种物理上非连续、非顺序的存储结构,数据元素之间的顺序是通过每个元素的指针关联的。
链表由一系列节点组成,每个节点一般至少会包含两部分信息:一部分是元素数据,另一部分是指向下一个元素指针。
与数组相比,链表具有其优势:
1.链表克服了数组需要提前设置长度的缺点,在运行时可以根据需要随意添加元素;
2.计算机的存储空间并不总是连续可用的,而链表可以灵活地使用存储空间,还能更好地对计算机的内存进行动态管理。
链表节点
public class Node {
//节点数据
int val;
//当前节点指向下一个节点数据的链接
Node next;
//当前节点的前一个节点
Node pre;
public Node(int val) {
this.val = val;
}
@Override
public String toString() {
return String.valueOf(val);
}
}
单向链表
链表汇总每个节点存储自己的数据以及下一个节点的指针。
单向链表只能从一个方便遍历。插入时候只能在链表头部插入。
public class SingleList {
//头节点
private Node head;
//元素个数
private int size;
/**
* 从链表头部添加数据
* 当前节点的next==头节点
*/
public int addHead(int val) {
Node cur = new Node(val);
if (size == 0) {
head = cur;
} else {
cur.next = head;
head = cur;
}
size++;
return val;
}
//删除头节点
public int deleteHead() {
if (head == null) {
System.out.println("空队列");
return -1;
}
int val = head.val;
head = head.next;
size--;
return val;
}
//查找指定元素,返回Node
public Node find(int val) {
Node cur = head;
while (cur != null) {
if (val == cur.val) {
return cur;
}
cur = cur.next;
}
return null;
}
/**
* 删除元素
* 目前元素的上一个节点的next = 目标元素的next节点
*/</