91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

無頭雙向鏈表的實現

發布時間:2020-07-19 05:05:19 來源:網絡 閱讀:199 作者:Linnnna 欄目:編程語言

無頭雙向鏈表的實現

1.頭插法

public void addFirst(int data) {  //頭插
        DLinkedNode newNode = new DLinkedNode(data);//加入的新節點
        DLinkedNode next = head.next;
        newNode.next = next;
        next.prev = newNode;
        head.next = newNode;
        newNode.prev = head;
    }

2.尾插法

public void addLast(int data) {//尾插
        DLinkedNode newNode = new DLinkedNode(data);//新插入的節點
        DLinkedNode prev = head.prev;
        newNode.next = head;
        head.prev = newNode;
        newNode.prev = prev;
        prev.next = newNode;
    }

3.任意位置插入,第一個數據節點為0號下標

public void addIndex(int index,int data) {//任意位置插入
        int size = size();
        if(index < 0 || index > size){
            return;
        }
        if(index == 0){
            addFirst(data);
            return;
        }
        if(index == size) {
            addLast(data);
            return;
        }
        DLinkedNode next = getPos(index);
        DLinkedNode prev = next.prev;
        DLinkedNode newNode = new DLinkedNode(data);
        prev.next = newNode;
        newNode.prev = prev;
        next.prev = newNode;
        newNode.next = next;
    }

這里用到的計算鏈表長度的方法:

public int size(){
        int size = 0;
        for(DLinkedNode cur = head.next; cur != head; cur = cur.next) {
            size++;
        }
        return size;
    }

和查找鏈表中某一位置的方法:

public DLinkedNode getPos(int index) {
        DLinkedNode cur = head.next;
        for(int i = 0; i < index; i++){
            cur = cur.next;
        }
        return cur;
    }

4.查找是否包含關鍵字key是否在鏈表當中

public boolean contains(int key) {//查找是否包含關鍵字key的節點
        for(DLinkedNode cur = head.next; cur != head; cur = cur.next) {
            if(cur.val == key){
                return true;
            }
        }
        return false;
    }

5.刪除第一次出現關鍵字為key的節點

public void remove(int key){
        DLinkedNode toRemove = find(key);
        if(toRemove == null) {
            return;
        }
        DLinkedNode prev = toRemove.prev;
        DLinkedNode next = toRemove.next;
        prev.next = next;
        next.prev = prev;
    }

這里用到查找關鍵字key在鏈表中的位置的方法:

public DLinkedNode find(int key) {
        for(DLinkedNode cur = head.next; cur != head; cur = cur.next) {
            if(cur.val == key){
                return cur;
            }
        }
        return null;
    }

6.刪除所有值為key的節點

public void removeAll(int key){
        while (true){
            DLinkedNode toRmove = find(key);
            if(toRmove == null){
                return;
            }
            DLinkedNode prev = toRmove.prev;
            DLinkedNode next = toRmove.next;
            prev.next = next;
            next.prev = prev;
        }
    }

7.打印鏈表

public void display(){
        System.out.print("正向:[");
        for(DLinkedNode cur = head.next; cur != head; cur = cur.next){
            System.out.print(cur.val);
            if(cur.next != head){
                System.out.print(",");
            }
        }
        System.out.println("]");
        System.out.println("反向:[");
        for(DLinkedNode cur = head.prev; cur != head; cur = cur.prev){
            System.out.print(cur.val);
            if(cur.prev != head){
                System.out.print(",");
            }
        }
        System.out.println("]");
    }

8.清空鏈表

public void clear(){
        head.next = head;
        head.prev = head;
    }
向AI問一下細節

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

AI

庆元县| 城口县| 长乐市| 岚皋县| 玛沁县| 永寿县| 祁东县| 涡阳县| 鄂尔多斯市| 闻喜县| 西安市| 当阳市| 鄯善县| 揭西县| 彰武县| 金秀| 休宁县| 江川县| 庆元县| 清镇市| 定远县| 原阳县| 桐梓县| 班戈县| 夏河县| 恩平市| 泽库县| 印江| 喀喇| 西宁市| 札达县| 麻阳| 合水县| 泽普县| 大关县| 黄梅县| 钦州市| 保德县| 中江县| 南城县| 赤城县|