介绍
- 双向链表是一种链表数据结构,每个节点包含两个指针,一个指向前一个节点,一个指向后一个节点。这种结构使得双向链表可以从任意一个节点开始向前或向后遍历。
案例
class DoublyListNode {
int val;
DoublyListNode prev;
DoublyListNode next;
DoublyListNode(int val) {
this.val = val;
this.prev = null;
this.next = null;
}
}
public class DoublyLinkedList {
private DoublyListNode head;
private DoublyListNode tail;
public void addToFront(int val) {
DoublyListNode newNode = new DoublyListNode(val);
if (head == null) {
head = newNode;
tail = newNode;
} else {
newNode.next = head;
head.prev = newNode;
head = newNode;
}
}
public void addToBack(int val) {
DoublyListNode newNode = new DoublyListNode(val);
if (tail == null) {
head = newNode;
tail = newNode;
} else {
newNode.prev = tail;
tail.next = newNode;
tail = newNode;
}
}
public void delete(int val) {
DoublyListNode current = head;
while (current != null) {
if (current.val == val) {
if (current == head) {
head = head.next;
if (head != null) head.prev = null;
} else if (current == tail) {
tail = tail.prev;
if (tail != null) tail.next = null;
} else {
current.prev.next = current.next;
current.next.prev = current.prev;
}
return;
}
current = current.next;
}
}
public void reverse() {
DoublyListNode temp = null;
DoublyListNode current = head;
while (current != null) {
temp = current.prev;
current.prev = current.next;
current.next = temp;
current = current.prev;
}
if (temp != null) {
head = temp.prev;
tail = current;
}
}
public void traverseForward() {
DoublyListNode current = head;
while (current != null) {
System.out.print(current.val + " ");
current = current.next;
}
System.out.println();
}
public void traverseBackward() {
DoublyListNode current = tail;
while (current != null) {
System.out.print(current.val + " ");
current = current.prev;
}
System.out.println();
}
}