本页面记录了存储库中实现的各种链表数据结构。它涵盖了基本的单向链表及其循环变体,以及反转、旋转和排序链表等专用操作。有关堆、缓存或树等其他数据结构,请参阅 数据结构。
该存储库提供了健壮的链表数据结构实现,主要关注单向链表及其上可执行的各种操作。这些实现既是教育示例,也是处理链接数据结构的实用工具。
来源: src/main/java/com/thealgorithms/datastructures/lists/SinglyLinkedList.java src/main/java/com/thealgorithms/datastructures/lists/CircleLinkedList.java src/main/java/com/thealgorithms/datastructures/lists/SinglyLinkedListNode.java
SinglyLinkedList 类实现了基本的单向链表,其中每个节点包含一个值和指向序列中下一个节点的引用。该实现包括标准的列表操作以及专用算法。
SinglyLinkedList 实现的关键特性
Iterable 接口,以支持增强的 for 循环该实现提供了以下方法
| 操作 | 方法 | 描述 |
|---|---|---|
| 插入 | insertHead(int) | 在开头插入元素 |
insert(int) | 在末尾插入元素 | |
insertNth(int, int) | 在特定位置插入 | |
| 删除 | deleteHead() | 删除第一个元素 |
delete() | 删除最后一个元素 | |
deleteNth(int) | 从特定位置删除 | |
| 搜索 | search(int) | 检查列表中是否存在某个值 |
| 实用工具 | middle() | 查找列表的中间节点 |
detectLoop() | 检查列表是否包含循环 | |
reverseListIter(SinglyLinkedListNode) | 迭代反转列表 | |
reverseListRec(SinglyLinkedListNode) | 递归反转列表 |
来源: src/main/java/com/thealgorithms/datastructures/lists/SinglyLinkedList.java src/main/java/com/thealgorithms/datastructures/lists/SinglyLinkedListNode.java
CircleLinkedList 类实现了循环单向链表,其中最后一个节点指向第一个节点,形成一个圆。此实现使用虚拟头节点来简化操作。
CircleLinkedList 实现的关键特性
该类提供了以下方法
| 方法 | 描述 |
|---|---|
getSize() | 返回列表中元素的数量 |
append(E value) | 将新元素添加到列表末尾 |
remove(int pos) | 移除并返回指定位置的元素 |
toString() | 返回列表的字符串表示形式 |
来源: src/main/java/com/thealgorithms/datastructures/lists/CircleLinkedList.java
SinglyLinkedList 类提供了两种反转链表的方法
reverseListIter): 使用三指针技术通过改变 next 指针的方向来反转列表。reverseListRec): 通过递归地反转从第二个节点开始的子列表,然后调整第一个节点的指针来反转列表。ReverseKGroup 类提供了在 K 大小的组中反转链表节点的功能
算法
来源: src/main/java/com/thealgorithms/datastructures/lists/ReverseKGroup.java
RotateSinglyLinkedLists 类提供了将单向链表向右旋转 K 个位置的功能
旋转算法
来源: src/main/java/com/thealgorithms/datastructures/lists/RotateSinglyLinkedLists.java
QuickSortLinkedList 类实现了单向链表的快速排序算法
链表快速排序算法
来源: src/main/java/com/thealgorithms/datastructures/lists/QuickSortLinkedList.java
MergeSortedSinglyLinkedList 类提供了将两个已排序的链表合并成一个已排序列表的功能
合并算法
来源: src/main/java/com/thealgorithms/datastructures/lists/MergeSortedSinglyLinkedList.java
SearchSinglyLinkedListRecursion 类继承自 SinglyLinkedList 以实现递归搜索算法
递归搜索算法
来源: src/main/java/com/thealgorithms/datastructures/lists/SearchSinglyLinkedListRecursion.java
CountSinglyLinkedListRecursion 类继承自 SinglyLinkedList 以实现递归计数算法
递归计数算法
来源: src/main/java/com/thealgorithms/datastructures/lists/CountSinglyLinkedListRecursion.java
各种列表操作在实现中的时间和空间复杂度
| 操作 | 时间复杂度 | 空间复杂度 |
|---|---|---|
| 按索引访问 | O(n) | O(1) |
| 搜索 | O(n) | O(1) |
| 在开头插入 | O(1) | O(1) |
| 在末尾插入 | O(n) | O(1) |
| 在指定位置插入 | O(n) | O(1) |
| 从开头删除 | O(1) | O(1) |
| 从末尾删除 | O(n) | O(1) |
| 从位置删除 | O(n) | O(1) |
| 反转列表 | O(n) | O(1) |
| 检测循环 | O(n) | O(1) |
| 查找中间 | O(n) | O(1) |
| 旋转列表 | O(n) | O(1) |
| 快速排序 | O(n log n) 平均, O(n²) 最坏 | O(log n) |
| 合并已排序列表 | O(n+m) | O(1) |
来源: src/main/java/com/thealgorithms/datastructures/lists/SinglyLinkedList.java src/main/java/com/thealgorithms/datastructures/lists/ReverseKGroup.java src/main/java/com/thealgorithms/datastructures/lists/RotateSinglyLinkedLists.java src/main/java/com/thealgorithms/datastructures/lists/QuickSortLinkedList.java src/main/java/com/thealgorithms/datastructures/lists/MergeSortedSinglyLinkedList.java
来源: src/test/java/com/thealgorithms/datastructures/lists/SinglyLinkedListTest.java402-432
来源: src/test/java/com/thealgorithms/datastructures/lists/SinglyLinkedListTest.java35-51
来源: src/test/java/com/thealgorithms/datastructures/lists/SinglyLinkedListTest.java107-143
来源: src/test/java/com/thealgorithms/datastructures/lists/RotateSinglyLinkedListsTest.java61-64
来源: src/test/java/com/thealgorithms/datastructures/lists/QuickSortLinkedListTest.java77-93