久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

java中的雙向鏈表怎么實現

151次閱讀
沒有評論

共計 1598 個字符,預計需要花費 4 分鐘才能閱讀完成。

在 Java 中,可以使用自定義的雙向鏈表類來實現雙向鏈表。以下是一個簡單的雙向鏈表的實現示例:

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;
    }
}

以上是一個簡單的雙向鏈表類的實現示例,你可以使用該類來創建雙向鏈表并進行插入、移除、獲取節點等操作。

丸趣 TV 網 – 提供最優質的資源集合!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-16發表,共計1598字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 天全县| 湖南省| 嘉祥县| 营山县| 姚安县| 郧西县| 德格县| 新郑市| 大兴区| 芒康县| 金坛市| 综艺| 大竹县| 乌拉特后旗| 枣阳市| 东台市| 榆林市| 昌图县| 贞丰县| 健康| 临江市| 洪湖市| 苍梧县| 海晏县| 汽车| 定襄县| 安远县| 广饶县| 林口县| 舒兰市| 贺兰县| 称多县| 临澧县| 新蔡县| 仪征市| 民勤县| 宜都市| 北宁市| 贵定县| 方城县| 阜康市|