java双向链表怎么实现

avatar
作者
筋斗云
阅读量:0

Java中的双向链表可以通过定义一个Node类来实现,该类包含一个值和两个指针,分别指向前一个节点和后一个节点。具体实现如下:

public class DoublyLinkedList {     private Node head; // 链表头节点     private Node tail; // 链表尾节点      // 节点类     private class Node {         private int value;         private Node prev;         private Node next;          public Node(int value) {             this.value = value;             this.prev = null;             this.next = null;         }     }      // 在链表末尾添加节点     public void add(int value) {         Node newNode = new Node(value);         if (head == null) {             head = newNode;             tail = newNode;         } else {             newNode.prev = tail;             tail.next = newNode;             tail = newNode;         }     }      // 在指定位置插入节点     public void insert(int index, int value) {         if (index < 0 || index > size()) {             throw new IndexOutOfBoundsException("Invalid index");         }          if (index == 0) {             Node newNode = new Node(value);             newNode.next = head;             head.prev = newNode;             head = newNode;         } else if (index == size()) {             add(value);         } else {             Node cur = head;             for (int i = 0; i < index; i++) {                 cur = cur.next;             }              Node newNode = new Node(value);             newNode.prev = cur.prev;             newNode.next = cur;             cur.prev.next = newNode;             cur.prev = newNode;         }     }      // 删除指定位置的节点     public void remove(int index) {         if (index < 0 || index >= size()) {             throw new IndexOutOfBoundsException("Invalid index");         }          if (index == 0) {             head = head.next;             head.prev = null;         } else if (index == size() - 1) {             tail = tail.prev;             tail.next = null;         } else {             Node cur = head;             for (int i = 0; i < index; i++) {                 cur = cur.next;             }              cur.prev.next = cur.next;             cur.next.prev = cur.prev;         }     }      // 获取指定位置的节点值     public int get(int index) {         if (index < 0 || index >= size()) {             throw new IndexOutOfBoundsException("Invalid index");         }          Node cur = head;         for (int i = 0; i < index; i++) {             cur = cur.next;         }          return cur.value;     }      // 返回链表的大小     public int size() {         int count = 0;         Node cur = head;         while (cur != null) {             count++;             cur = cur.next;         }         return count;     } } 

使用示例:

public class Main {     public static void main(String[] args) {         DoublyLinkedList list = new DoublyLinkedList();                  list.add(1);         list.add(2);         list.add(3);                  System.out.println("Size: " + list.size()); // 输出:Size: 3                  list.insert(1, 4);                  System.out.println("Size: " + list.size()); // 输出:Size: 4         System.out.println("Element at index 1: " + list.get(1)); // 输出:Element at index 1: 4                  list.remove(2);                  System.out.println("Size: " + list.size()); // 输出:Size: 3         System.out.println("Element at index 2: " + list.get(2)); // 输出:Element at index 2: 3     } } 

以上代码实现了一个简单的双向链表,并提供了添加、插入、删除和获取节点的功能。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!