在Java中實現雙向鏈表,首先需要創(chuàng)建一個表示鏈表節(jié)點的類,然后創(chuàng)建一個雙向鏈表類來管理這些節(jié)點
public class Node<T> {
T data; // 節(jié)點存儲的數據
Node<T> prev; // 指向前一個節(jié)點的引用
Node<T> next; // 指向下一個節(jié)點的引用
public Node(T data) {
this.data = data;
this.prev = null;
this.next = null;
}
}
public class DoublyLinkedList<T> {
private Node<T> head; // 鏈表頭節(jié)點
private Node<T> tail; // 鏈表尾節(jié)點
public DoublyLinkedList() {
head = null;
tail = null;
}
// 在鏈表頭部添加節(jié)點
public void addFirst(T data) {
Node<T> newNode = new Node<>(data);
if (head == null) {
head = newNode;
tail = newNode;
} else {
newNode.next = head;
head.prev = newNode;
head = newNode;
}
}
// 在鏈表尾部添加節(jié)點
public void addLast(T data) {
Node<T> newNode = new Node<>(data);
if (tail == null) {
head = newNode;
tail = newNode;
} else {
newNode.prev = tail;
tail.next = newNode;
tail = newNode;
}
}
// 刪除鏈表頭部的節(jié)點
public void removeFirst() {
if (head == null) {
System.out.println("鏈表為空,無法刪除元素");
return;
}
if (head == tail) {
head = null;
tail = null;
} else {
head = head.next;
head.prev = null;
}
}
// 刪除鏈表尾部的節(jié)點
public void removeLast() {
if (tail == null) {
System.out.println("鏈表為空,無法刪除元素");
return;
}
if (head == tail) {
head = null;
tail = null;
} else {
tail = tail.prev;
tail.next = null;
}
}
// 遍歷并打印鏈表中的所有元素
public void printList() {
Node<T> currentNode = head;
while (currentNode != null) {
System.out.print(currentNode.data + " ");
currentNode = currentNode.next;
}
System.out.println();
}
}
public class Main {
public static void main(String[] args) {
DoublyLinkedList<Integer> list = new DoublyLinkedList<>();
list.addFirst(1);
list.addFirst(2);
list.addLast(3);
list.addFirst(4);
list.printList(); // 輸出: 4 2 1 3
list.removeFirst();
list.removeLast();
list.printList(); // 輸出: 2 1
}
}
這個例子展示了如何實現一個簡單的雙向鏈表。你可以根據需要擴展這個實現,例如添加更多的方法來操作鏈表,如插入、刪除指定位置的節(jié)點等。