3.4鏈表----鏈表中元素的獲取、查詢和修改


本節是在上一小節的基礎上繼續完善我們的鏈表相關方法的編寫,在本節中我們着重對如何獲取鏈表中元素、查詢元素以及修改元素進行學習。

一、獲取元素

1.關於獲取鏈表中元素的方法的分析

由於我們使用了虛擬頭結點,而我們每次都需要從第一個真實節點開始,因此需要首先得到虛擬頭結點的下一個節點是誰,然后在此基礎上進行遍歷工作,相關代碼如下:

  //獲取鏈表的第index(0-based)個位置的元素   (實際不常用,練習用)
    public E get(int index) {
        //合法性判斷
        if (index < 0 || index >= size) {
            throw new IllegalArgumentException("Get failed,Illegal index");
        }

        Node<E> cur = dummyHead.next;
        for (int i = 0; i < index; i++) {
            cur = cur.next;
        }
        return cur.e;
    }

2.獲得鏈表的第一個元素

對於該方法則是依靠在get()方法的。

  //獲得鏈表的第一個元素
    public E getFirst() {
        return get(0);
    }

3.獲得鏈表的最后一個元素

對於該方法頁是依靠在get()方法的。

 //獲得鏈表的最后一個元素
    public E getLast() {
        return get(size - 1);
    }

 

二、修改鏈表元素

由於我們使用了虛擬頭結點,而我們每次都需要從第一個真實節點開始,因此需要首先得到虛擬頭結點的下一個節點是誰,然后在此基礎上進行遍歷工作,相關代碼如下:

    //修改鏈表的第index(0-based)個位置的元素   (實際不常用,練習用)
    public void set(int index, E e) {
        //合法性判斷
        if (index < 0 || index >= size) {
            throw new IllegalArgumentException("update failed,Illegal index");
        }

       Node<E> cur = dummyHead.next;
        for (int i = 0; i < index; i++) {
            cur = cur.next;
        }
        cur.e = e;
    }

三、判斷是否有元素e

由於我們使用了虛擬頭結點,而我們每次都需要從第一個真實節點開始,因此需要首先得到虛擬頭結點的下一個節點是誰,然后判斷給定的元素值與鏈表中的元素值內容是否相等(equals()方法),若相等則返回true,否則返回false。

 //查找鏈表中是否有元素e
    public boolean contains(E e) {
       Node<E> cur = dummyHead.next;
        while (cur != null) {
            if (cur.e.equals(e)) {
                return true;
            }
            cur = cur.next;
        }
        return false;
    }

四、toString()方法的重寫

為了在輸出該鏈表對象時可以查看相關自定義的信息,我們對toString()進行重寫改造。

//重寫object類,便於測試
    @Override
    public String toString() {
        StringBuilder res = new StringBuilder();
        Node<E> cur = dummyHead.next;
        while (cur != null) {
            res.append(cur + "->");
            cur = cur.next;
        }

        res.append("NULL");

        return res.toString();
    }

此時該方法等同於

 //重寫object類,便於測試
    @Override
    public String toString() {
        StringBuilder res = new StringBuilder();

        for (Node<E> cur = dummyHead.next; cur != null; cur = cur.next) {
            res.append(cur + "->");
        }
        res.append("NULL");

        return res.toString();
    }

 

 

五、測試

新建一個main函數,填寫相關測試代碼如下:

package LinkedList;

public class TestMain {
    public static void main(String[] args) {
        LinkedList<Integer> linkedList = new LinkedList<Integer>();

        System.out.println("============在鏈表頭部添加============");
        for (int i = 0; i < 5; i++) {
            linkedList.addFirst(i);
            System.out.println(linkedList);
        }


        System.out.println("============修改鏈表============");
        linkedList.set(2,666);
        System.out.println(linkedList);
    }
}

結果為:

結果分析:由於是在鏈表頭部添加元素,故最終顯示結果為從右到左,最右為NULL(也就是最后一個節點)。

 關於本小節,若您覺得還行、還過得去,麻煩給個推薦吧,謝謝!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM