泛型类
java编程完成泛型类DoubleLinkedList(双向链表),DoubleLinkedList的基本功能设计要求:创建双向链表、插入新的结点、删除指定元素结点、查找指定元素结点、修改指定位置结点、遍历循环链表。 public class DoubleLinkedList<T> {private Node<T> head;
private Node<T> tail;
private class Node<T> {
T data;
Node<T> prev;
Node<T> next;
public Node(T data) {
this.data = data;
}
}
public void insert(T data) {
Node<T> newNode = new Node<>(data);
if (head == null) {
head = newNode;
tail = newNode;
} else {
tail.next = newNode;
newNode.prev = tail;
tail = newNode;
}
}
public void delete(T data) {
Node<T> current = head;
while (current != null) {
if (current.data.equals(data)) {
if (current.prev != null) {
current.prev.next = current.next;
} else {
head = current.next;
}
if (current.next != null) {
current.next.prev = current.prev;
} else {
tail = current.prev;
}
return;
}
current = current.next;
}
}
public Node<T> find(T data) {
Node<T> current = head;
while (current != null) {
if (current.data.equals(data)) {
return current;
}
current = current.next;
}
return null;
}
public void modify(int index, T newData) {
Node<T> current = head;
int i = 0;
while (current != null && i < index) {
current = current.next;
i++;
}
if (current != null) {
current.data = newData;
}
}
public void traverse() {
Node<T> current = head;
while (current != null) {
System.out.print(current.data + " ");
current = current.next;
}
}
}
这是一个泛型类DoubleLinkedList,它实现了双向链表的基本功能。在这个类中,我们使用了一个内部类Node来表示链表中的节点,其中包含数据和指向前一个节点和后一个节点的引用。类中包含了插入新节点、删除指定元素节点、查找指定元素节点、修改指定位置节点和遍历循环链表的方法。每个方法都根据具体的需求进行了实现。 当编写泛型类DoubleLinkedList时,使用Java语言需要考虑以下基本功能设计要求:
1. 创建双向链表:创建一个空的双向链表,初始化头部和尾部节点为空,同时维护链表的大小。
2. 插入新的节点:可以在链表的头部、尾部或指定位置插入新的节点。
3. 删除指定元素节点:删除链表中指定元素值的节点。
4. 查找指定元素节点:查找特定元素值的节点,并返回其位置。
5. 修改指定位置节点:允许通过索引修改链表中指定位置的节点的值。
6. 遍历双向链表:提供方法来遍历整个双向链表,输出其中的所有元素。
下面是一个基本的泛型类DoubleLinkedList的实现,满足上述的基本功能设计要求:
java
public class DoubleLinkedList<T> {
private Node<T> head;
private Node<T> tail;
private int size;
private static class Node<T> {
T data;
Node<T> prev;
Node<T> next;
Node(T data) {
this.data = data;
}
}
public DoubleLinkedList() {
head = null;
tail = null;
size = 0;
}
// 在链表尾部插入新节点
public void insertAtEnd(T data) {
Node<T> newNode = new Node<>(data);
if (tail == null) {
head = newNode;
tail = newNode;
} else {
tail.next = newNode;
newNode.prev = tail;
tail = newNode;
}
size++;
}
// 删除指定元素节点
public void deleteNode(T data) {
Node<T> current = head;
while (current != null) {
if (current.data.equals(data)) {
if (current == head) {
head = head.next;
if (head != null) {
head.prev = null;
}
} else if (current == tail) {
tail = tail.prev;
tail.next = null;
} else {
current.prev.next = current.next;
current.next.prev = current.prev;
}
size--;
return;
}
current = current.next;
}
}
// 查找指定元素节点的位置
public int findNode(T data) {
Node<T> current = head;
int index = 0;
while (current != null) {
if (current.data.equals(data)) {
return index;
}
current = current.next;
index++;
}
return -1;
}
// 修改指定位置节点的值
public void updateNode(int index, T data) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException("Index out of bounds");
}
Node<T> current = head;
for (int i = 0; i < index; i++) {
current = current.next;
}
current.data = data;
}
// 遍历双向链表
public void traverse() {
Node<T> current = head;
while (current != null) {
System.out.print(current.data + " ");
current = current.next;
}
}
}
这是一个简单的泛型双向链表类的实现,你可以根据自己的需求进一步扩展和优化这个实现。希望这个例子能够帮助你完成泛型类DoubleLinkedList的基本功能设计。
页:
[1]