中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java模擬實現雙向鏈表的方法

發布時間:2022-05-26 15:46:10 來源:億速云 閱讀:119 作者:iii 欄目:開發技術

這篇文章主要介紹“java模擬實現雙向鏈表的方法”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“java模擬實現雙向鏈表的方法”文章能幫助大家解決問題。

雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個數據結點中都有兩個指針,分別指向直接后繼和直接前驅。所以,從雙向鏈表中的任意一個結點開始,都可以很方便地訪問它的前驅結點后繼結點

下圖是雙向鏈表的邏輯結構圖,和單鏈表不同的是,雙向鏈表中每個節點包含兩個節點的指針引用,和一個數據域,這兩個節點分別指向前一個節點和后一個節點;

雙向鏈表的這種結構比起單鏈表,其改進之處正在于此,通過對前后節點的引用可以使得在整個鏈表中,通過給定的值,可以從前或者向后遍歷,大大提升了遍歷查詢的效率,一定程度上解決了單鏈表的性能問題,但與此同時,鏈表的存儲開銷也增大了,我們熟悉的linkedList,其底層就是這個原理實現的.

java模擬實現雙向鏈表的方法

廢話不多說,相信通過上面的解釋大家已經很明白了,下面直接上代碼,可以結合代碼和圖結構理解雙向鏈表,

public class DoubleLinkTest<T> {

    /**
     * 內部構造節點類
     * 
     * @param <T>
     */
    private class Node<T> {
        private T data;
        private Node next; // 指向下一個節點的引用
        private Node prev; // 指向前一個節點的引用

        public Node(T data) {
            this.data = data;
        }
    }

    private Node<T> head; // 模擬頭結點
    private Node<T> last; // 模擬尾部節點
    private Node<T> other; // 暫定一個臨時節點,用作指針節點
    private int length;

    public void DoubleLinkTest() {
        head = new Node<T>(null);
        last = head;
        length = 0;
    }

    public void DoubleLinkTest(T data) {
        head = new Node<T>(data);
        last = head;
        length = 0;
    }

    /**
     * 鏈表是否為空
     * 
     * @return
     */
    public boolean isEmpty() {
        return length == 0;
    }

    /**
     * 普通添加,往鏈表尾部添加
     * 
     * @param data
     */
    public void add(T data) {
        if (isEmpty()) { // 鏈表為空,新創建一個鏈表
            head = new Node<T>(data);
            last = head;
            length++;
        } else {
            other = new Node<T>(data);
            other.prev = last;
            last.next = other; // 將新的節點與原來的尾部節點進行結構上的關聯
            last = other; // other將成為最后一個節點
            length++;
        }
    }

    /**
     * 在指定的數據后面添加數據
     * 
     * @param data
     * @param insertData
     */
    public void addAfter(T data, T insertData) {
        other = head;
        while (other != null) { // 我們假定這個head是不為空的。
            if (other.data.equals(data)) {
                Node<T> t = new Node<T>(insertData);
                t.prev = other;
                t.next = other.next;// 對新插入的數據進行一個指向的定義
                other.next = t;

                if (t.next == null) {
                    last = t;
                }
                length++;
            }
            other = other.next;
        }
    }

    /**
     * 刪除,刪除指定的數據
     * 
     * @param data
     */
    public void remove(T data) {
        other = head;// 我們假定這個head是不為空的。
        while (other != null) {
            if (other.data.equals(data)) {
                other.prev.next = other.next;
                length--;
            }
            other = other.next;
        }

    }

    /**
     * 測試打印數據
     */
    public void printList() {
        other = head;
        for (int i = 0; i < length; i++) {
            System.out.println(other.data + "  ");
            other = other.next;
        }
    }

    public static void main(String[] args) {

        DoubleLinkTest<Integer> link = new DoubleLinkTest<Integer>();
        link.add(1);
        link.add(2);
        link.add(3);
        link.add(5);
        link.add(6);
        link.add(7);
        link.printList();

        System.out.println(" ============== ");

        System.out.println(" ==== 在3后面添加一個數據開始========== ");
        link.addAfter(3, 99);
        link.printList();

        System.out.println(" ==== 在3后面添加一個數據結束========== " + "\r\n");

        System.out.println(" ==== 移除一個數據開始========== ");
        link.remove(99);
        link.printList();
        System.out.println(" \r\n");

    }

}

運行main函數,可以看到控制臺的打印輸出:

java模擬實現雙向鏈表的方法

關于“java模擬實現雙向鏈表的方法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广灵县| 平邑县| 光山县| 伽师县| 肇州县| 汾西县| 三江| 革吉县| 张家界市| 曲沃县| 东阳市| 晴隆县| 松江区| 三台县| 长武县| 乌拉特中旗| 剑川县| 武山县| 郓城县| 天等县| 佛冈县| 株洲市| 曲阜市| 安塞县| 仁化县| 东平县| 滦平县| 察哈| 中江县| 嘉荫县| 专栏| 天水市| 岳阳县| 金坛市| 玛沁县| 赣州市| 咸阳市| 武强县| 贵港市| 昭通市| 凌海市|