鏈表----鏈表中元素的獲取、查詢和修改
阿新 • • 發佈:2019-04-02
res fir head 繼續 except col sys 個推 代碼
本節是在上一小節的基礎上繼續完善我們的鏈表相關方法的編寫,在本節中我們著重對如何獲取鏈表中元素、查詢元素以及修改元素進行學習。
一、獲取元素
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()方法的。
//獲得鏈表的第一個元素 publicE 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(也就是最後一個節點)。
關於本小節,若您覺得還行、還過得去,麻煩給個推薦吧,謝謝!!
鏈表----鏈表中元素的獲取、查詢和修改