溫馨提示×

如何在java中實現雙向鏈表

小樊
81
2024-09-28 17:57:41
欄目: 編程語言

在Java中實現雙向鏈表,首先需要創(chuàng)建一個表示鏈表節(jié)點的類,然后創(chuàng)建一個雙向鏈表類來管理這些節(jié)點

  1. 創(chuàng)建表示鏈表節(jié)點的類(Node):
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;
    }
}
  1. 創(chuàng)建雙向鏈表類(DoublyLinkedList):
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();
    }
}
  1. 使用示例:
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é)點等。

0