java涓殑鍙屽悜閾捐〃鎬庝箞瀹炵幇
鍦↗ava涓紝鍙互浣跨敤鑷畾涔夌殑鍙屽悜閾捐〃绫绘潵瀹炵幇鍙屽悜閾捐〃銆備互涓嬫槸涓€涓畝鍗曠殑鍙屽悜閾捐〃鐨勫疄鐜扮ず渚嬶細
public class DoublyLinkedList<T> {
private Node<T> head; // 閾捐〃澶磋妭鐐? private Node<T> tail; // 閾捐〃灏捐妭鐐?
// 閾捐〃鑺傜偣绫? private static class Node<T> {
private T data; // 鑺傜偣鏁版嵁
private Node<T> prev; // 鍓嶄竴涓妭鐐瑰紩鐢? private Node<T> next; // 鍚庝竴涓妭鐐瑰紩鐢?
public Node(T data) {
this.data = data;
}
}
// 鍦ㄩ摼琛ㄦ湯灏炬坊鍔犺妭鐐? public void add(T data) {
Node<T> newNode = new Node<>(data);
if (head == null) {
head = newNode;
tail = newNode;
} else {
newNode.prev = tail;
tail.next = newNode;
tail = newNode;
}
}
// 鍦ㄩ摼琛ㄦ寚瀹氫綅缃彃鍏ヨ妭鐐? public void insert(int index, T data) {
if (index < 0 || index > size()) {
throw new IndexOutOfBoundsException();
}
Node<T> newNode = new Node<>(data);
if (index == 0) {
if (head == null) {
head = newNode;
tail = newNode;
} else {
newNode.next = head;
head.prev = newNode;
head = newNode;
}
} else if (index == size()) {
tail.next = newNode;
newNode.prev = tail;
tail = newNode;
} else {
Node<T> current = getNode(index);
newNode.prev = current.prev;
newNode.next = current;
current.prev.next = newNode;
current.prev = newNode;
}
}
// 鑾峰彇閾捐〃鎸囧畾浣嶇疆鐨勮妭鐐? private Node<T> getNode(int index) {
if (index < 0 || index >= size()) {
throw new IndexOutOfBoundsException();
}
Node<T> current = head;
for (int i = 0; i < index; i++) {
current = current.next;
}
return current;
}
// 绉婚櫎閾捐〃鎸囧畾浣嶇疆鐨勮妭鐐? public void remove(int index) {
if (index < 0 || index >= size()) {
throw new IndexOutOfBoundsException();
}
if (index == 0) {
head = head.next;
if (head == null) {
tail = null;
} else {
head.prev = null;
}
} else if (index == size() - 1) {
tail = tail.prev;
tail.next = null;
} else {
Node<T> current = getNode(index);
current.prev.next = current.next;
current.next.prev = current.prev;
}
}
// 鑾峰彇閾捐〃澶у皬
public int size() {
int count = 0;
Node<T> current = head;
while (current != null) {
count++;
current = current.next;
}
return count;
}
}
浠ヤ笂鏄竴涓畝鍗曠殑鍙屽悜閾捐〃绫荤殑瀹炵幇绀轰緥锛屼綘鍙互浣跨敤璇ョ被鏉ュ垱寤哄弻鍚戦摼琛ㄥ苟杩涜鎻掑叆銆佺Щ闄ゃ€佽幏鍙栬妭鐐圭瓑鎿嶄綔銆?/p>