引言
提到链表(Linked List),不少人第一反应是——一个经典但略显复杂的数据结构。没错,链表在数据结构的世界中,扮演着一个灵活而多变的角色。它不像数组那样固守一块固定的内存空间,而是通过节点间的指针实现动态管理。因此,链表特别适合插入和删除操作频繁的场景。
在这篇文章中,我会以深入浅出的方式,带你一步步了解链表的实现与其背后的原理。同时,为了照顾到大家不同层次的需求,我们还会展示一些高级开发示例,相信一定会对你有所启发。
链表基础
链表,其实就是一个“节点链条”,每个节点中包含两部分内容:
- 数据域:存储具体的数据。
- 指针域:指向下一个节点。
链表的常见类型
- 单向链表:节点之间的连接是单向的,沿着“头”到“尾”的方向。
- 双向链表:节点不仅指向下一个节点,还可以回头指向前一个节点,来回自如。
- 循环链表:最后一个节点指回头节点,形成一个闭环。
在 Java 中实现单向链表
我们可以先从简单的单向链表入手,看看它的核心结构和实现方式。
class Node {
int data;
Node next;
Node(int data) {
this.data = data;
this.next = null;
}
}
class SinglyLinkedList {
Node head;
// 添加节点到链表末尾
public void add(int data) {
Node newNode = new Node(data);
if (head == null) {
head = newNode;
} else {
Node temp = head;
while (temp.next != null) {
temp = temp.next;
}
temp.next = newNode;
}
}
// 打印链表
public void printList() {
Node temp = head;
while (temp != null) {
System.out.print(temp.data + " -> ");
temp = temp.next;
}
System.out.println("null");
}
}
public class Main {
public static void main(String[] args) {
SinglyLinkedList list =