
双向链表是一种数据结构,其中每个节点不仅包含数据,还包含指向其前一个节点(previous)和后一个节点(next)的引用。这使得链表可以双向遍历。为了提高代码的复用性和类型安全性,我们通常会使用泛型来定义双向链表及其节点。
Node 类是双向链表的基本组成单元。它应该被设计为泛型,以存储任何类型的数据。
public class Node<T> {
T data; // 存储节点数据
Node<T> next; // 指向下一个节点的引用
Node<T> previous; // 指向前一个节点的引用
public Node(T data) {
this.data = data;
this.next = null;
this.previous = null;
}
@Override
public String toString() {
return data.toString();
}
}DoublyLinkedList 类管理着链表的整体结构,包括头节点(head)、尾节点(tail)和链表大小(size)。它也应是泛型的,并且为了使元素可比较(如果需要排序或特定查找),泛型类型 T 可以限定为实现 Comparable<T> 接口。
public class DoublyLinkedList<T extends Comparable<T>> {
protected Node<T> head;
protected Node<T> tail;
int size = 0;
public DoublyLinkedList() {
this.head = null;
this.tail = null;
}
/**
* 向链表末尾添加一个新节点
* @param data 要添加的数据
* @return 新添加的节点
*/
public Node<T> append(T data) {
Node<T> newNode = new Node<>(data);
if (head == null) { // 链表为空时
head = newNode;
tail = newNode;
} else { // 链表不为空时
newNode.previous = tail;
tail.next = newNode;
tail = newNode; // 更新尾节点
}
size++;
return newNode;
}
// 为了方便演示,添加一个toString方法
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(String.format("List Size [%d]: ", size));
Node<T> current = head;
while (current != null) {
sb.append(current.data);
if (current.next != null) {
sb.append(" <-> ");
}
current = current.next;
}
return sb.toString();
}
}删除双向链表中的节点比单向链表更为复杂,因为它需要同时维护前驱和后继节点的指针。此外,删除操作必须考虑多种边界条件,包括链表为空、删除头节点、删除尾节点、删除中间节点以及链表中只有一个节点的情况。
立即学习“Java免费学习笔记(深入)”;
在执行任何删除操作之前,必须对传入的索引 location 进行严格的校验,确保其在有效范围内。
public void delete(int location) throws IllegalArgumentException {
// 1. 参数校验:链表为空、索引越界
if (head == null || location < 0 || location >= size) {
throw new IllegalArgumentException("无效的删除位置或链表为空。");
}
// ... 后续删除逻辑
}为了确保 delete 方法的健壮性,我们需要根据待删除节点的位置进行分类讨论。
如果链表中只有一个节点,并且要删除它,那么 head 和 tail 都应该被设置为 null。
// 2. 特殊情况:链表中只有一个节点
if (size == 1) {
head = null;
tail = null;
}当链表包含多个节点,且要删除的是头节点时:
// 3. 删除头节点 (location == 0, 且 size > 1)
else if (location == 0) {
head以上就是Java 双向链表指定索引节点删除深度解析的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号