什么是双向链表?
双向链表是由节点组成的数据结构,每个节点包含两个部分:数据和指向前一个节点和后一个节点的引用。它相对于单向链表的优势在于能够方便地从前向后或从后向前遍历。
双向链表的节点结构
一个典型的双向链表节点包含以下信息:
class Node {
int data; // 节点的数据
Node prev; // 指向前一个节点的引用
Node next; // 指向下一个节点的引用
public Node(int data) {
this.data = data;
this.prev = null;
this.next = null;
}
}
双向链表的基本操作
1. 添加元素
在双向链表中添加元素,需要创建一个新节点,将新节点的引用指向当前节点的下一个节点,将新节点的前一个节点引用指向当前节点。同时,需要更新当前节点的后一个节点的前一个节点引用,确保链表连接正确。
2. 删除元素
删除元素时,将当前节点的前一个节点引用指向当前节点的后一个节点,同时更新当前节点的后一个节点的前一个节点引用。
3. 遍历链表
双向链表可以方便地从前向后或从后向前遍历。在遍历时,可以使用prev
引用向前遍历。
Java中的双向链表实现
以下是一个简单的Java双向链表实现:
class Node {
int data; // 节点的数据
Node prev; // 指向前一个节点的引用
Node next; // 指向下一个节点的引用
public Node(int data) {
this.data = data;
this.prev = null;
this.next = null;
}
}
class DoublyLinkedList {
Node head; // 头节点
public void append(int data) {
Node newNode = new Node(data);
if (head == null) {
head = newNode;
return;
}
Node current = head;
while (current.next != null) {
current = current.next;
}
current.next = newNode;
newNode.prev = current;
}
public void delete(int data) {
if (head == null) {
return;
}
if (head.data == data) {
head = head.next;
if (head != null) {
head.prev = null;
}
return;
}
Node current = head;
while (current != null) {
if (current.data == data) {
current.prev.next = current.next;
if (current.next != null) {
current.next.prev = current.prev;
}
return;
}
current = current.next;
}
}
public void display() {
Node current = head;
while (current != null) {
System.out.print(current.data + " <-> ");
current = current.next;
}
System.out.println("null");
}
}
public class Main {
public static void main(String[] args) {
DoublyLinkedList doublyLinkedList = new DoublyLinkedList();
doublyLinkedList.append(1);
doublyLinkedList.append(2);
doublyLinkedList.append(3);
doublyLinkedList.display(); // 输出:1 <-> 2 <-> 3 <-> null
doublyLinkedList.delete(2);
doublyLinkedList.display(); // 输出:1 <-> 3 <-> null
}
}
这个简单的示例演示了如何创建一个双向链表、添加元素、删除元素和遍历链表。
希望本篇博客内容能帮助你更好地理解双向链表的基本概念和实现方法。