Java " />

扫描二维码下载沐宇APP

沐宇

微信扫码使用沐宇小程序

沐宇

java涓殑鍙屽悜閾捐〃鎬庝箞瀹炵幇

扬州沐宇科技
2023-10-24 10:18:46
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>

扫码添加客服微信