用java写个双链表
时间: 2023-03-04 15:56:04 浏览: 59
好的,以下是一个简单的 Java 双向链表实现:
```java
public class DoublyLinkedList<T> {
private Node<T> head;
private Node<T> tail;
private static class Node<T> {
T data;
Node<T> prev;
Node<T> next;
public Node(T data) {
this.data = data;
this.prev = null;
this.next = null;
}
}
public DoublyLinkedList() {
this.head = null;
this.tail = null;
}
public boolean isEmpty() {
return head == null;
}
public void insertFirst(T data) {
Node<T> newNode = new Node<>(data);
if (isEmpty()) {
tail = newNode;
} else {
head.prev = newNode;
}
newNode.next = head;
head = newNode;
}
public void insertLast(T data) {
Node<T> newNode = new Node<>(data);
if (isEmpty()) {
head = newNode;
} else {
tail.next = newNode;
newNode.prev = tail;
}
tail = newNode;
}
public void deleteFirst() {
if (!isEmpty()) {
if (head == tail) {
tail = null;
} else {
head.next.prev = null;
}
head = head.next;
}
}
public void deleteLast() {
if (!isEmpty()) {
if (head == tail) {
head = null;
} else {
tail.prev.next = null;
}
tail = tail.prev;
}
}
public void display() {
Node<T> current = head;
while (current != null) {
System.out.print(current.data + " ");
current = current.next;
}
System.out.println();
}
}
```
这是一个泛型双向链表,支持在链表头和尾部插入、删除节点,并且提供了一个简单的打印方法以显示链表中的节点数据。使用时,可以像下面这样创建一个链表对象并进行操作:
```java
DoublyLinkedList<Integer> list = new DoublyLinkedList<>();
list.insertFirst(3);
list.insertFirst(2);
list.insertFirst(1);
list.insertLast(4);
list.insertLast(5);
list.display(); // 1 2 3 4 5
list.deleteFirst();
list.deleteLast();
list.display(); // 2 3 4
```