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

溫馨提示×

溫馨提示×

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

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

如何對java鏈表進行增、刪、查、改操作

發布時間:2020-06-23 10:41:33 來源:億速云 閱讀:138 作者:Leah 欄目:編程語言

如何對java鏈表進行增、刪、查、改操作?針對這個問題,今天小編總結了這篇文章,希望能幫助更多想解決這個問題的朋友找到更加簡單易行的辦法。

鏈表也是一個線性的數據結構,與數組不同的是,鏈表在內存中的存儲方式是隨機存儲。

下面給出涵蓋鏈表四個操作的一個完整的例子,有幾點需要注意的是:

(一)在增刪改查之前,都需要對給出的下標進行邊界判斷;

(二)增加一個名為last的節點,可以方便在鏈表的尾部進行操作,省去了查找到最后一個節點的時間復雜度;

(三)在鏈表的內部插入元素時,我們先找到要插入位置的前一個節點prevNode,然后可以記錄下prevNode的next,插入時先將prevNode的next指向要插入的節點,再將要插入的節點的next指向當前的next。這一點和C++中的操作也略有不同;

(四)刪除節點時,用removedNode來記錄刪除節點的返回值,并且不要忘了size要減1。

操作示例如下:

public class MyLinkedList {
    //定義一個靜態的內部類
    private static class Node{
        int data;
        Node next;
        Node(int data){
            this.data = data;
        }
    }
 
    private Node head;
    private Node last;//為了方便尾部插入元素的操作
    private int size;//size表示鏈表的實際長度
 
    public void insert(int data, int index)throws Exception{
        if(index < 0 || index > size)
            throw new IndexOutOfBoundsException("超出鏈表節點范圍!");
        Node insertedNode = new Node(data);
        if(size == 0){//插入第一個元素時元素個數為0
            head = insertedNode;
            last = insertedNode;
        }else if(size == index){//在鏈表的末尾插入
            last.next = insertedNode;
            last = insertedNode;
        }else{
            Node prevNode = get(index - 1);
            Node nextNode = prevNode.next;
            prevNode.next = insertedNode;
            insertedNode.next = nextNode;
        }
        size++;
    }
 
    public void update(int data, int index) throws Exception{
        if(index < 0 || index >= size)
            throw new IndexOutOfBoundsException("超出鏈表節點范圍!");
        if(index == 0)
            head.data = data;
        else if(index == size - 1)
            last.data = data;
        else{
            Node temp = get(index);
            temp.data = data;
        }
    }
 
    public Node remove(int index) throws Exception {
        if(index < 0 || index >= size){
            throw new IndexOutOfBoundsException("超出鏈表節點范圍!");
        }
        Node removedNode = null;//不給removedNode分配堆內存
        if(index == 0){
            removedNode = head;
            head = head.next;
        }
        else if(index == size - 1){
            //刪除尾結點
            Node prevNode = get(index - 1);
            removedNode = prevNode.next;
            prevNode.next = null;
            last = prevNode;
        }
        else{
            Node prevNode = get(index - 1);
            Node nextNode = prevNode.next.next;
            removedNode = prevNode.next;
            prevNode.next = nextNode;
        }
        size--;
        return removedNode;
    }
 
 
 
    //查找鏈表元素
    public Node get(int index) throws Exception{
        if(index < 0 || index >= size){
            throw new IndexOutOfBoundsException("超出鏈表節點范圍!");
        }
        Node temp = head;
        for(int i = 0; i < index; i++){
            temp = temp.next;
        }
//        size--;
        return temp;
    }
 
    //輸出鏈表
    public void output(){
        Node temp = head;
        while(temp != null){
            System.out.println(temp.data);
            temp = temp.next;
        }
    }
 
    public static void main(String[] args) throws Exception{
        MyLinkedList myLinkedList = new MyLinkedList();
        myLinkedList.insert(3,0);
        myLinkedList.insert(7,1);
        myLinkedList.insert(9,2);
        myLinkedList.insert(5,3);
        myLinkedList.insert(6,1);
        myLinkedList.remove(0);
        myLinkedList.update(2,1);
        myLinkedList.output();
        System.out.println(myLinkedList.size);
    }
}

關于對java鏈表進行增、刪、查、改操作的方法就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

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

AI

增城市| 绥棱县| 介休市| 惠水县| 龙陵县| 麻城市| 西丰县| 育儿| 普定县| 敦化市| 广灵县| 岑巩县| 蒙阴县| 太谷县| 景德镇市| 分宜县| 鄂尔多斯市| 周至县| 民和| 平顶山市| 乌审旗| 南阳市| 昌邑市| 临夏县| 梁河县| 临洮县| 莎车县| 区。| 庆阳市| 敦煌市| 广元市| 徐闻县| 清丰县| 新巴尔虎右旗| 进贤县| 依安县| 汽车| 鄱阳县| 沛县| 郁南县| 区。|